如何从对象中删除数组值

时间:2016-10-28 01:51:42

标签: javascript javascript-objects for-in-loop

var obj = {
a: [1, 3, 4],
b: 2,
c: ['hi', 'there']
   }
   removeArrayValues(obj);
   console.log(obj); // --> { b: 2 }

这是我的代码:

function removeArrayValues(obj) {
 for (var key in obj){
 if (Array.isArray(obj[key])) delete obj[key]
 //return obj[key] -> {b: 2, c: ["hi", "there"]}
 }
 return obj[key]
}

为什么当我在obj["a"]内而不是obj["c"]内返回时,它仅返回for/in loopobj["k"]。我在发布这个问题之前就已经解决了这个问题,但我在这个问题上遇到了很多关于数组和对象的问题,并且可以使用对这里发生的事情的解释。

1 个答案:

答案 0 :(得分:2)

首先,让我们看看你的对象。它有3个键/值对:

var obj = {
    a: [1, 3, 4],//the value here is an array
    b: 2,//the value here is not an array
    c: ['hi', 'there']//the value here is an array
};

对于该对象中的每个键,您的removeArrayValues函数将删除任何具有数组值的值:

if (Array.isArray(obj[key]))

该条件将返回" true"如果值是一个数组。您可以在此演示中查看此内容:console.log循环中的for将记录" true"," false"和"真":



var obj = {
a: [1, 3, 4],
b: 2,
c: ['hi', 'there']
   }
   removeArrayValues(obj);

function removeArrayValues(obj) {
 for (var key in obj){
 console.log(Array.isArray(obj[key]))
 if (Array.isArray(obj[key])) delete obj[key]
 //return obj[key] -> {b: 2, c: ["hi", "there"]}
 }
 return obj[key]
}




因此,第一个键将被删除(" true"),第二个键不会(" false"),第三个键将被删除("真"。)