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 loop
和obj["k"]
。我在发布这个问题之前就已经解决了这个问题,但我在这个问题上遇到了很多关于数组和对象的问题,并且可以使用对这里发生的事情的解释。
答案 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"),第三个键将被删除("真"。)