【问题标题】:Looping through an object and a nested for loop that loops through array遍历一个对象和一个遍历数组的嵌套 for 循环
【发布时间】:2015-06-24 23:14:40
【问题描述】:

我正在遍历一个对象,然后在每个对象上将它与我的数组中的项目进行比较,希望然后将不相同的对象推送到我的 ItemsNotInObject 数组中。希望有人可以为我阐明这一点。提前谢谢你。

var obj = {a:1, a:2, a:3};
var array = [1, 4, 2, 5, 6];
var ItemsNotInObject = [];


for (var prop in obj) {
    for(var i = 0, al = array.length; i < al; i++){
       if( obj[prop].a !== array[i] ){
           ItemsNotInObject.push(array[i]);
        }
    }
}

console.log(ItemsNotInObject);
//output of array: 1 , 4 , 2 , 5, 6

//output desired is: 4 , 5 , 6

【问题讨论】:

  • 属性名称必须不同。 {a:1, a:2, a:3} 变为 {a:3}

标签: javascript arrays object for-loop for-in-loop


【解决方案1】:
  1. 您的对象有重复的键。这是无效JSON 对象。让它们独一无二
  2. 不要访问像obj[prop].aobj[prop]这样的对象值 a
  3. 克隆原始数组。
  4. 使用indexOf() 检查数组是否包含对象属性。
  5. 如果有,请将其从克隆的数组中删除。

var obj = {
  a: 1,
  b: 2,
  c: 3
};
var array = [1, 4, 2, 5, 6];
var ItemsNotInObject = array.slice(); //clone the array

for (var prop in obj) {
  if (array.indexOf(obj[prop]) != -1) {
    for (var i = 0; i < ItemsNotInObject.length; i++) {
      if (ItemsNotInObject[i] == obj[prop]) {
        ItemsNotInObject.splice(i, 1); //now simply remove it because it exists
      }
    }
  }
}

console.log(ItemsNotInObject);

【讨论】:

  • 这是一个如此简单的解决方案,非常感谢您,君王。我确实搞砸了我的json的写作,它真的是这种形式 obj = [{key:value},{key:value}, {etc}];但是,尽管如此,切片救了我的命。再次感谢您。
【解决方案2】:

如果你可以让你的 obj 变量成为一个数组,你可以这样做;

var obj = [1, 2, 3];
var array = [1, 4, 2, 5, 6];
var ItemsNotInObject = [];


    for(i in array){
       if( obj.indexOf(array[i]) < 0) ItemsNotInObject.push(array[i]);
    }

console.log(ItemsNotInObject);

如果 obj 变量需要是 json 对象,请提供它的正确形式,以便我可以据此更改代码。

【讨论】:

  • 感谢您的帮助,但在我的应用程序中不能选择转换为数组。
猜你喜欢
  • 1970-01-01
  • 2014-06-29
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
相关资源
最近更新 更多