在javascript

时间:2016-06-15 10:07:46

标签: javascript arrays

我在javascript中有2个数组

数组1

var columns=[{name: 'id', default: true}, {name: 'type', default: true},{name: 'typeName', default: true}, {name: 'client', default: false}];

数组2

var unSelect=["id", "type", "typeName"]

现在我想要一个新的数组,即Array 3,其中只有非匹配元素匹配 即name的{​​{1}}

在这种情况下

column

我试过拼接,但是我的索引不匹配,谢谢先进

4 个答案:

答案 0 :(得分:1)

以下是使用Array.prototype.map函数执行此操作的最简单方法。此函数可以迭代数组并返回每次迭代所需的内容。

var array3 = columns.map(function(item) {

   if (unselected.indexOf(item.name) < 0)   //see if the name of an element object is in the unselected array
     return item;                           // if yes, return the element 
})

答案 1 :(得分:0)

尝试使用过滤器作为

var unSelect=["id", "type", "typeName"];
var array3 = columns.filter(function(obj){
  return unSelect.indexOf( obj.name ) == -1;
});

<强>样本

var columns = [{
  name: 'id',
  default: true
}, {
  name: 'type',
  default: true
}, {
  name: 'typeName',
  default: true
}, {
  name: 'client',
  default: false
}];
var unSelect = ["id", "type", "typeName"];
var array3 = columns.filter(function(obj) {
  return unSelect.indexOf(obj.name) == -1;
});
console.log(array3);

答案 2 :(得分:0)

您可以使用哈希表作为不需要项目的参考,以便更快地访问indexOf

var columns = [{ name: 'id', default: true }, { name: 'type', default: true }, { name: 'typeName', default: true }, { name: 'client', default: false }],
    unSelect = ["id", "type", "typeName"],
    hash = Object.create(null),
    result;

unSelect.forEach(function (a) {
    hash[a] = true;
});

result = columns.filter(function (a) {
    return !hash[a.name];
});

console.log(result);

答案 3 :(得分:0)

这将是Array.prototype.filter()&amp;的解决方案。 Array.prototype.some()组合。

&#13;
&#13;
var columns = [{name: 'id', default: true}, {name: 'type', default: true},{name: 'typeName', default: true}, {name: 'client', default: false}],
   unSelect = ["id", "type", "typeName"],
   filtered = columns.filter(f => !unSelect.some(e => e == f.name));
console.log(filtered);
&#13;
&#13;
&#13;