在javascript中将数组与对象键进行比较

时间:2017-07-20 13:04:18

标签: javascript arrays

我有以下数组,

["aa","bb"] 

我有以下对象,

{"aa":1,"bb":2,"cc":3}

我需要下面的结果,

{"cc":3}

我需要将数组与对象键进行比较,使用循环是可能的,但是对于大量数据需要更多时间,有没有其他最快的方法来获得我的结果而不使用循环,Anyhelp Appreciated ...

6 个答案:

答案 0 :(得分:2)

为避免二次时间复杂度,您可以使用Set并将其作为this参数传递给过滤器。然后使用Object.assign

从那些过滤后的键中重构一个对象

var a = ["aa","bb"];
var b = {"aa":1,"bb":2,"cc":3};

var difference = Object.assign(...Object.keys(b).filter(function(e){
  return !this.has(e);
}, new Set(a)).map(key => ({ [key]: b[key] }) ));

console.log(difference);

答案 1 :(得分:1)

如果您可以改变对象,那么您可以使用delete删除不需要的属性。



const props = ["aa","bb"];
const obj = {"aa": 1,"bb": 2,"cc": 3};

props.forEach(prop => delete obj[prop]);

console.log(obj);




或者只使用for...of循环遍历属性名称数组。



const props = ["aa","bb"];
const obj = {"aa": 1,"bb": 2,"cc": 3};

for (prop of props) delete obj[prop];

console.log(obj);




如果您不想改变对象,而是创建一个没有不需要的属性的新对象,那么您可以先使用

进行浅层克隆
newObj = {...obj};

答案 2 :(得分:0)

这样的事可能吗?

var a = ["aa","bb"];
var b = {"aa":1,"bb":2,"cc":3};

var result = {};

Object.keys(b).filter(function(e){
  return a.indexOf(e) < 0;
}).forEach(function(e){
  result[e] = b[e];
});


console.log(result);

答案 3 :(得分:0)

循环遍历该对象并检查该属性是否不存在于数组中:

&#13;
&#13;
var a = ["aa","bb"];
var o = {"aa":1,"bb":2,"cc":3};

// Loop through object
for(var prop in o){
  // If property doesn't exist in array...
  if(a.indexOf(prop) === -1){
    console.log(prop + ":" + o[prop]);
  }  
}
&#13;
&#13;
&#13;

答案 4 :(得分:0)

您可以遍历该对象并将对象键与数组项进行比较,并将缺少的键作为对象返回。

var a = ["aa","bb"] ;
var o = {"aa":1,"bb":2,"cc":3,'dd':4};

function get(o){
var p = {};
for(var key in o){
	if(a.indexOf(key) == -1){
 		 	p[key] = o[key];
  }
}
return p;
}
var c = get(o);
console.log(c);

答案 5 :(得分:0)

您可以使用Object.assign()Object.entries()Array.prototype.includes()来确定对象中的当前键是否是数组元素,使用computed属性返回对象还是false,这不会导致属性被分配到新对象

var arr = ["aa","bb"] 

var obj = {"aa":1,"bb":2,"cc":3}

var res =  Object.assign({}
           , ...Object.entries(obj).map(([key, prop]) =>
               !arr.includes(key) && {[key]:prop})
           );

console.log(res);