使用过滤器为不同索引的对象添加属性

时间:2017-06-22 09:51:02

标签: javascript filter

我是javascript的初学者。我想使用filter来挤压这段代码。我想创建一个对象,一些索引添加一个属性,另一个索引分配不同的属性。

var nodeAttribute=new Object();
var minorityNodes=[ 22, 1, 2, 10, 14, 23, 25, 4, 15 ];
var N=30;
for (var i=0; i<N; i++){
    if (minorityNodes.indexOf(i) >= 0){
        nodeAttribute[i]='minority';
    }else{
        nodeAttribute[i]='majority';
    }
}

应该怎么做?

更新

nodeAttribute
{ '0': 'majority',
  '1': 'minority',
  '2': 'minority',
  '3': 'majority',
  '4': 'minority',
  '5': 'majority',
  '6': 'majority',
  '7': 'majority',
  '8': 'majority',
  '9': 'majority',
  '10': 'minority',
  '11': 'majority',
  '12': 'majority',
  '13': 'majority',
  '14': 'minority',
  '15': 'minority',
  '16': 'majority',
  '17': 'majority',
  '18': 'majority',
  '19': 'majority',
  '20': 'majority',
  '21': 'majority',
  '22': 'minority',
  '23': 'minority',
  '24': 'majority',
  '25': 'minority',
  '26': 'majority',
  '27': 'majority',
  '28': 'majority',
  '29': 'majority' }

1 个答案:

答案 0 :(得分:0)

我不确定filter如何帮助这种情况(或表现),因为它会迭代一个集合并返回一个子集。

如果你的目标是现代浏览器,你可以使用一套更快的查找(对不起,如果语法错误,我在移动设备上):

var nodeAttribute={};
var minorityNodes=new Set([22, 1, 2, 10, 14, 23, 25, 4, 15 ]);
var N=30;
for (var i=0; i<N; i++){
    if (minorityNodes.has(i)) {
        nodeAttribute[i]='minority';
    }else{
        nodeAttribute[i]='majority';
    }
}

如果您不能使用集合,请使用对象:

var minorityNodes = {
    22: true,
    1: true,
    // etc
};

检查存在:

if (minorityNodes[i]) ...