“我想创建一个新数组,仅包含属性国家/地区为“美国”的对象”
这正是Array.filter() method https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter is for:
var filteredArray = arr.filter(function(val, i, a) {
return val.country==="United States";
});
请注意,.filter()
该方法在版本 9 之前的 IE 中不可用,但我上面链接到的 MDN 页面向您展示了如何实现它,因此阅读该页面本身应该可以回答您的问题。
另请注意,在问题的(非工作)代码中,您的两个for
循环基本上彼此做相同的事情,因为它们都在迭代arr
,所以这样嵌套它们是没有意义的。您不应该在数组上使用 for..in 循环,但如果您执行key
值将是数字索引,它不会以某种方式获取存储在每个索引处的对象的属性。
EDIT:
“某些对象文字对于给定属性具有相同的值,我想创建一个仅包含这些对象文字的新数组。”
好的,重新阅读本文,我想您并不是真的想通过指定国家/地区来选择元素,您想为任何具有重复条目的国家/地区选择元素吗?因此,如果还有另外三个元素都包含“新西兰”,您需要选择它们此外到“美国”的?如果是这样,你可以这样做:
var countryCount = {},
i;
for (i = 0; i < arr.length; i++)
if (countryCount.hasOwnProperty(arr[i].country)
countryCount[arr[i].country]++;
else
countryCount[arr[i].country] = 1;
var filteredArr = arr.filter(function(val, i, a) {
return countryCount[val.country] > 1;
});