繁体   English   中英

如何从对象中删除数组?

[英]How do I remove an array from an object?

我正在尝试编写一个迭代给定对象(obj)的函数。 每次遇到对象内的数组时,它都会删除该数组。 代码似乎合适,但请告诉我我缺少什么:

function removeArrayValues(obj) {

  for (isKeyAnArray in obj) {
     if (typeof obj[isKeyAnArray] === 'array') {
       delete obj[isKeyAnArray];
    }
  }
}

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

removeArrayValues(obj);
console.log(obj); // --> { b: 2 }

typeof返回数组的"object" 您可以使用Array.isArray()来检查该属性是否为数组。

这是您的代码的修改版本:

function removeArrayValues(obj) {

  for (isKeyAnArray in obj) {
     if (Array.isArray(obj[isKeyAnArray])) {
       delete obj[isKeyAnArray];
    }
  }
}

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

removeArrayValues(obj);
console.log(obj);

检查它是否是一个数组是另一种方式。 在包含的代码示例 2 中显示了变体。

 function removeArrayValues(obj) { for (isKeyAnArray in obj) { if (obj[isKeyAnArray] instanceof Array){ console.log("instanceof array true"); delete obj[isKeyAnArray]; } if (Array.isArray(obj[isKeyAnArray])){ console.log("isArray true"); delete obj[isKeyAnArray]; } console.log(typeof obj[isKeyAnArray]); if (typeof obj[isKeyAnArray] === 'array') { delete obj[isKeyAnArray]; } } } var obj = { a: [1, 3, 4], b: 2, c: ['hi', 'there'] } removeArrayValues(obj); console.log(obj); // --> { b: 2 } document.getElementById("exampleText").innerHTML = JSON.stringify(obj);
 <p id="exampleText"></p>

@Gokhan Sari 的做法非常准确。 如果您想使用 es6 或只是时髦路线,这更像是一个附加组件:D

const removeArrayValues = obj => Object.entries(obj).forEach(val => Array.isArray(val[1]) && delete obj[val[0]]);

请注意,这不会改变原始对象(只需添加作为替代答案,以防万一):

const newObj = Object.fromEntries(
  Object.entries(obj).filter(([, value]) => !Array.isArray(value))
)

console.log(newObj);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM