当前位置:  开发笔记 > 编程语言 > 正文

如何从javascript Array.map()回调中排除一些元素

如何解决《如何从javascriptArray.map()回调中排除一些元素》经验,为你挑选了2个好方法。

基本上,我想实现以下内容:

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);
}

更新那些坚持认为它是"如何制作阵列唯一"问题的复制品.我看到了这个帖子,对于我的情况,我认为它不适用.我没有一系列值,我需要使其独特.我有一个对象数组,我需要构建一个唯一值数组.差异可能很微妙 - 但是要了解该主题的用例,我将构建一个非唯一的数组,然后使其唯一.似乎比我原来的解决方案更糟糕



1> Bek..:

你可以用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;
}, []);


它不是一个单一的值,它是积累东西的数组
我的观点是要说明如何使用`reduce`来解决具体问题,无论如何修复它

2> Nina Scholz..:

更新:解决方案 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) + '
');
推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有