基本上,我想实现以下内容:
var categories = []; var products = // some array of product objects products.map(function(value) { if(categories.indexOf(value.Category === -1)) categories.push(value.Category); });
因此,categories
数组包含唯一的产品类别列表.
我觉得应该有一个更好的方法去做,但没有想到任何事情.
如果没有,那么可能首先没有必要使用map()
.我可以这么简单
var categories = []; var products = // some array of product objects for (var i = 0; i < products.length; i++) { if(categories.indexOf(products[i].Category === -1)) categories.push(products[i].Category); }
更新那些坚持认为它是"如何制作阵列唯一"问题的复制品.我看到了这个帖子,对于我的情况,我认为它不适用.我没有一系列值,我需要使其独特.我有一个对象数组,我需要构建一个唯一值数组.差异可能很微妙 - 但是要了解该主题的用例,我将构建一个非唯一的数组,然后使其唯一.似乎比我原来的解决方案更糟糕
你可以用reduce
而不是map
var products = [{Category:'vegetable', price: 1}, {Category:'fruits', price: 2}]; var categories = products.reduce(function(sum, product) { if(sum.indexOf(product.Category) === -1){ sum.push(product.Category); } return sum; }, []);
更新:解决方案 Array.prototype.reduce()
var products = [{ Name: 'milk', price: 2.50, Category: 'groceries' }, { Name: 'shirt', price: 10, Category: 'clothing' }, { Name: 'apples', price: 5, Category: 'groceries' }],
categories = products.reduce(function (r, a) {
if (!~r.indexOf(a.Category)) {
r.push(a.Category);
}
return r;
}, []);
document.write('' + JSON.stringify(categories, 0, 4) + '
');