【发布时间】:2016-08-06 18:11:40
【问题描述】:
这个问题可能与我几个小时前问的this question 太相似了,但我正在努力解决的问题实际上比我最初想象的要复杂。我不知道在 JavaScript 中没有两个对象可以被认为是相同的,即使这两个对象具有相同的属性和值集。
我在 JavaScript 中有两个这样的对象数组。
var from = [
{city: "seoul", country: "korea"},
{city: "tokyo", country: "japan"},
{city: "beijing", country: "china"},
{city: "new york", country: "usa"}
];
var to = [
{city: "seoul", country: "korea"},
{city: "tokyo", country: "japan"},
{city: "toronto", country: "canada"}
];
我想要做的是检查“from”数组中的任何对象是否已经在“to”数组中,并且只有当它不在“to”中时才将对象推送到“to”数组数组,并且我只想将“from”数组中的一个对象添加到“to”数组中,即使“from”数组中有其他对象不在“to”数组中。换句话说,我想在将对象推送到“to”数组后立即跳出循环。
最后,我希望“to”数组看起来像这样。
var target = {
{city: "seoul", country: "korea"},
{city: "tokyo", country: "japan"},
{city: "toronto", country: "canada"},
{city: "beijing", country: "china"}
};
这是我想出的一个函数来实现这个效果。
function ruthere (source, target) {
for (var i = 0; i < target.length; i++) {
for (var j = 0; j < source.length; j++) {
if (target[i].city == source[j].city) {
console.log("Already there");
} else {
target.push(source[j]);
i = target.length-1;
break;
}
}
}
}
这已经达到了我想要的结果,但这仍然没有达到我想要的效果。
*edit:我只需要检查一个对象的name属性的值是否相同。国家财产的价值不必相同。
【问题讨论】:
-
(target[i].name您的示例对象没有“名称”属性。你可能希望这个阅读(target[i].city -
@Hamms 对不起。这是一个错字。
-
还要注意
break只会跳出最里面的for循环,而不是两者。你可能想return。
标签: javascript arrays javascript-objects