Javascript 如何从对象中删除数组值

Javascript 如何从对象中删除数组值,javascript,javascript-objects,for-in-loop,Javascript,Javascript Objects,For In Loop,这是我的密码: var obj = { a: [1, 3, 4], b: 2, c: ['hi', 'there'] } removeArrayValues(obj); console.log(obj); // --> { b: 2 } 为什么当我在for/in循环中返回它时,它只返回obj[“a”]和obj[“c”],而不返回obj[“k”。在我即将发布此文章之前,我就已经解决了这个问题,但我在数组和对象方面都遇到了很多问题,可以对这里发生的情况进行解释。首先,让我们

这是我的密码:

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

为什么当我在
for/in循环中返回它时,它只返回
obj[“a”]
obj[“c”]
,而不返回
obj[“k”
。在我即将发布此文章之前,我就已经解决了这个问题,但我在数组和对象方面都遇到了很多问题,可以对这里发生的情况进行解释。

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

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]
}
对于该对象中的每个键,您的
removeArrayValues
函数将删除任何具有数组作为值的键:

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
};
如果值是数组,则该条件将返回“true”。您可以在本演示中检查这一点:for
循环中的
控制台.log
将记录“true”、“false”和“true”:

var obj={
答:[1,3,4],
b:2,
c:[“嗨”,“那儿”]
}
删除ArrayValues(obj);
函数removeArrayValues(obj){
for(obj中的var键){
console.log(Array.isArray(obj[key]))
如果(Array.isArray(obj[key])删除obj[key]
//返回obj[key]->{b:2,c:[“hi”,“there”]}
}
返回obj[键]

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

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]
}
对于该对象中的每个键,您的
removeArrayValues
函数将删除任何具有数组作为值的键:

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
};
如果值是数组,则该条件将返回“true”。您可以在本演示中检查这一点:for循环中的
控制台.log
将记录“true”、“false”和“true”:

var obj={
答:[1,3,4],
b:2,
c:[“嗨”,“那儿”]
}
删除ArrayValues(obj);
函数removeArrayValues(obj){
for(obj中的var键){
console.log(Array.isArray(obj[key]))
如果(Array.isArray(obj[key])删除obj[key]
//返回obj[key]->{b:2,c:[“hi”,“there”]}
}
返回obj[键]

}
不清楚您不理解的内容。if返回“true”、“false”和“true”,而不是obj[“k”]“-您要询问的
“k”
来自哪里?如果循环中有一个
return
语句,与您注释掉的行一致,那么它将立即退出函数,而不完成循环。请注意,函数的
返回值将是
未定义的
,因为循环删除最后一项后,
obj[key]
未定义。我可以看到的是,您已成功删除了包含数组值的所有对象键。。又是什么问题?你不明白的地方还不清楚。if返回“true”、“false”和“true”,而不是obj[“k”]“-您要询问的
“k”
来自哪里?如果循环中有一个
return
语句,与您注释掉的行一致,那么它将立即退出函数,而不完成循环。请注意,函数的
返回值将是
未定义的
,因为循环删除最后一项后,
obj[key]
未定义。我可以看到的是,您已成功删除了包含数组值的所有对象键。。问题是什么?