for循环内的return语句(算法脚本)

时间:2019-07-04 11:25:09

标签: javascript

我正在做一个算法,该函数需要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语句不起作用,所以我什至不知道我的逻辑是错还是写

3 个答案:

答案 0 :(得分:0)

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

您可以使用函数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]);
        }
    }
}

答案 1 :(得分:0)

您需要使用另一个循环来迭代'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])
            }
        }
    }
}

答案 2 :(得分:0)

我认为这是您要实现的目标。

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);