【问题标题】:How to remove array values from an object如何从对象中删除数组值
【发布时间】:2017-03-10 20:33:06
【问题描述】:
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]
}

当我在for/in loop 中返回它而不是obj["k"] 时,为什么它只返回obj["a"]obj["c"]。我在即将发布此问题之前就发现了问题,但我在数组和对象方面遇到了很多问题,并且可以使用对这里发生的事情的解释。

【问题讨论】:

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

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


【解决方案1】:

首先,让我们看看你的对象。它有 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”。您可以在此演示中查看:for 循环内的console.log 将记录“true”、“false”和“true”:

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”),第三个键将被删除(“true”)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-16
    • 2017-06-15
    • 1970-01-01
    • 2020-01-20
    • 2020-06-01
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多