当对象具有键值对(其中值为“”)时,删除数组内的JSON对象

时间:2019-12-04 22:34:39

标签: javascript arrays json javascript-objects

如果对象中某个键值的值为“”,该如何删除键值对中的对象?
例如(“” name“:”“)
为了我的一生,我无法弄清楚为什么前两个对象会被删除而不是最后一个对象被删除。
我认为这与“”有关,但我不能对为什么说出来。

[
 {"name":{},"mail":{},"msg":{},"timestamp":1575240647577,"_id":"9ZCckYie9I3XUmKC"},
 {"name":"james 
   smith","mail":"jamessmith@gmail.com","msg":"hi","timestamp":1575241232158,"_id":"fVWl1bufhCYb9rcQ"},
{"location":"Miami","timestamp":1575240647577,"_id":"9ZCckYie9I3XUmKC"},

 {"name":"","mail":"","msg":"","timestamp":1575240990509,"_id":"AzePVvAbc0ZQgJe9"}
]
databaseQuery()
async function databaseQuery() {
    const response = await fetch('/api')
    const data = await response.json()
    let index

      for (let item of data) {
        if (!item.location) {
          index = data.indexOf(item)
          data.splice(index, 1)
        }

编辑:对不起,我没有正确解释我的问题。我是想寻求有关如何删除整个对象本身的指导。

4 个答案:

答案 0 :(得分:2)

可能是因为您在同时编辑的集合上进行了迭代。

代替使用filter方法:

const withLocation = data.filter(x => "location" in x && x.location !== "")

答案 1 :(得分:0)

这与循环的运行方式有关。

在循环的第一次迭代中,索引为0,因此删除了数组中的第一项。

在数组的第二次迭代中,您得到的索引为1,因此删除了最后一项(因为此时数组中只剩下2项)。

自从最后一个项目被删除以来,它没有其他项目可以循环显示。

答案 2 :(得分:0)

您的问题不清楚。

如果您只想删除JSON中的元素,只需使用Delete => https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete

示例代码

let xyz = { "name"     : ""
          , "mail"     : ""
          , "msg"      : ""
          , "timestamp": 1575240990509
          , "_id"      : "AzePVvAbc0ZQgJe9"
          } 

for (let elm in xyz) {
  if (xyz[elm]==='') delete xyz[elm];
}

console.log( xyz )

答案 3 :(得分:0)

我认为最好的方法可能就是这样

const arrayWithLocation = data.filter(x => x.location)

const arrayWithoutLocation = data.filter(x => !x.location)