【问题标题】:Return statement inside for loop(algorithm scripting)循环内的返回语句(算法脚本)
【发布时间】:2019-11-15 03:15:36
【问题描述】:

我正在做一个算法,该函数有 2 个参数,一个数组和另一个对象。如果数组中对象中的一个值与第二个参数的一个值匹配,那么我需要返回该数组对象。 我的退货声明不起作用

function whatIsInAName(collection, source) {
    let r = Object.values(source);

    console.log(r);
    for (let i = 0; i < collection.length; i++) {
        console.log(Object.values(collection[i]));

        if (Object.values(collection[i]) == r) {
            return Object.values(collection[i])
        }
    }
}

样本测试:

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

return 语句不起作用,所以我什至无法判断我的逻辑是否错误或写入

【问题讨论】:

  • 您正在比较内存中的引用,而不是两个对象之间的键和值。
  • Object.values(collection[i]) == r 将返回 false,因为无法像这样比较数组。

标签: javascript


【解决方案1】:

您正在比较内存中的引用,而不是两个对象之间的键和值。

您可以使用函数every 作为一种方法来比较键和值。

这是假设值不是对象(键值对)也不是数组。

function whatIsInAName(collection, source) {
    for (let i = 0; i < collection.length; i++) {
        if (Object.entries(collection[i]).every(([key, value]) => source[key] === value)) {
            return Object.values(collection[i]);
        }
    }
}

【讨论】:

    【解决方案2】:

    我认为这就是你想要实现的目标。

    function whatIsInAName(collection, source) {
        let r = Object.values(source);
    
            for (let i = 0; i < collection.length; i++) { 
    
              if (collection[i].last == source.last) {
    
                  return Object.values(collection[i])
              }
            }
    
    }
    var data = whatIsInAName([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" });
    
    console.log(data);
    

    【讨论】:

      【解决方案3】:

      您需要使用另一个循环来迭代 'r' 并使用 indexOf/includes 来检查它是否存在于 collection

      的当前迭代中
      function whatIsInAName(collection, source) {
          let r = Object.values(source);
      
          console.log(r);
          for (let i = 0; i < collection.length; i++) {
              console.log(Object.values(collection[i]));
              for (let j = 0; j < r.length; j++) {
                  if (Object.values(collection[i]).indexOf(r[j]) != -1) {
                      return Object.values(collection[i])
                  }
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-05-05
        • 1970-01-01
        • 2017-05-15
        • 1970-01-01
        • 1970-01-01
        • 2016-09-14
        • 2021-04-08
        • 1970-01-01
        • 2016-11-29
        相关资源
        最近更新 更多