【问题标题】:Doing some freecodecamp problems and I came across a small issue with directing object values [duplicate]做一些freecodecamp问题,我遇到了一个指导对象值的小问题[重复]
【发布时间】:2021-08-09 02:18:04
【问题描述】:

代码只返回第一个参数中与第二个参数匹配的内容,然后检查。 link just in case

我的主要关注点是 if 语句中的“source[srcKeys[i]]”。 “srcKeys”单独返回“['last']”,但如果你在它前面添加'source',例如“source[srcKeys]”,你会得到“Capulet”。我的问题是为什么它返回“Capulet”而不是“['last']”,因为它针对 Object.keys 而不是值?

    function whatIsInAName(collection, source) {
  var srcKeys = Object.keys(source);



  return collection.filter((obj) => {

    for (var i = 0; i < srcKeys.length; i++) {
      if (obj[srcKeys[i]] !== source[srcKeys[i]]) {
        return false
      }
    }
    return true;
  });
}

whatIsInAName(
  [
    { first: "Romeo", last: "Montague" },
    { first: "Mercutio", last: null },
    { first: "Tybalt", last: "Capulet" }
  ],
  { last: "Capulet" }
);

【问题讨论】:

    标签: javascript


    【解决方案1】:

    但如果你在它前面添加“source”,例如“source[srcKeys]”,你会得到“Capulet”

    你真的试过了吗?

    听起来你的意思是表达式 source[['last']] 将计算为 Capulet

    让我们试试吧:

    const collection = [{
        first: "Romeo",
        last: "Montague"
      },
      {
        first: "Mercutio",
        last: null
      },
      {
        first: "Tybalt",
        last: "Capulet"
      }
    ];
    
    const source = {
      last: "Capulet"
    };
    
    const srcKeys = Object.keys(source);
    
    console.log(source[srcKeys]);

    好吧,我将成为...另一个 Javascript 宝石!太棒了!

    这里是龙

    好吧,看起来 JavaScript 允许您使用单个元素数组作为索引来索引数组,并且它会正常工作。

    我在互联网上唯一能找到解释这一点的就是blog post

    该帖子还继续表明,即使做类似的事情:

    source[[[[srcKeys]]]]
    

    也会给出结果Capulet

    多么美妙!

    故事的寓意是:Javascript 有很多不那么明显的怪癖。我会称它们为未定义,但 Javascript 在古怪的部门中似乎相当一致。这就是为什么许多开发人员转而使用其他可以编译为 Javascript 的语言的原因,只是为了避免这些隐藏的陷阱。


    我的问题是为什么它返回“Capulet”而不是“['last']”

    在这种情况下,它不会不应该返回/评估到['last'],除非您在source 中有一个值,这是一个仅包含'last' 的列表。谁知道呢,也许还有另一个隐藏的 JavaScript 怪癖可能会返回 ['last']。据我所知,应该是不可能的,但我之前就错了……

    【讨论】:

      猜你喜欢
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      • 2021-01-19
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      相关资源
      最近更新 更多