【发布时间】:2019-06-30 17:01:14
【问题描述】:
目的是构建一个函数,它将一个对象数组作为第一个参数。作为第二个参数,它需要一个键值对。
function whatIsInAName(collection, source)
现在函数应该返回一个数组,其中包含对象中所有匹配的键和值。例如:
whatIsInAName([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" })´
应该返回
[{ first: "Tybalt", last: "Capulet" }]
和
whatIsInAName([{ "apple": 1, "bat": 2 }, { "bat": 2 }, { "apple": 1, "bat": 2, "cookie": 2 }], { "apple": 1, "bat": 2 })
应该返回
[{ "apple": 1, "bat": 2 }, { "apple": 1, "bat": 2, "cookie": 2 }]
我尝试循环遍历集合并通过源数组搜索匹配项。像这样:
function whatIsInAName(collection, source) {
// What's in a name?
var arr = [];
for (var i = 0; i < Object.keys(collection).length; i++) {
for (var j = 0; j < Object.keys(source).length; j++) {
if (collection[i].last === source.last) {
arr.push(collection[i]);
}
}
}
console.log(arr);
}
在这种情况下whatIsInAName([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" })
这并不奇怪。
我不明白的是,为什么我不能概括上述解决方案,以便它在其他情况下也适用。
为什么不能简单地给出条件:
if (collection[i] === source)
(请注意集合和来源后面缺少的“Last"”键。)
当我console.log(source) 时,控制台会记录它。所以恕我直言,上面的条件语句应该起作用,并且应该将匹配项推送到 arr 数组中。
如何构建一个函数,该函数返回一个包含对象中所有匹配键和值的数组。
function whatIsInAName(collection, source)
为什么(collection[i] === source) 不起作用?
谢谢。
【问题讨论】:
-
如果两个对象是对一个对象的相同引用,则它们只是
===。
标签: javascript arrays object matching