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