Javascript:拼接多维对象

标签 javascript arrays object

我有这个 Object/Array 结构:

Obj = {
    "User": {
        "user1": [{
            "desc": "NG60",
            "Id": 3473631702,
            "Status": "offline"
        }],

        "user2": [{
            "desc": "somevalue",
            "Id": 963346121,
            "Status": "offline"
        },
        {
            "desc": "othervalue",  // SPLICE THIS OUT
            "Id": 963346122,      // SPLICE THIS OUT
            "Status": "offline"  // SPLICE THIS OUT
        }],

        "user3": [{
            "desc": "whatever",
            "Id": 972878784
        }]
    }
}

我想动态地过滤掉不同的值(在这个例子中固定) 如果没有 ID,我想删除整个用户数组。

例如,如果我想过滤掉 user2 的第二个数组元素:

 for(var users in Obj) {
     for(var Ids in Obj[users]) {
         if(Obj[users][Ids].Id == 963346122){
             Obj[users][Ids].splice(0, 1); // ERROR HERE
         }
     }
     if(Obj[users][Ids] == undefined) {
         delete Obj[users];
     }
 }

我得到这个错误:

User[users][Ids].splice(0, 1) is not a function

如何只拼接我正在寻址的数组元素,而不拼接完整的 user2 数组?

最佳答案

使用 array.prototye.filter 从数组中删除用户,并使用 delete 删除整个用户数组,以防没有剩余元素:

var obj = {
    "User": {
        "user1": [
          {
            "desc": "NG60",
            "Id": 3473631702,
            "Status": "offline"
          }
        ],
        "user2": [
          {
            "desc": "somevalue",
            "Id": 963346121,
            "Status": "offline"
          },
          {
            "desc": "othervalue",  // SPLICE THIS OUT
            "Id": 963346122,      // SPLICE THIS OUT
            "Status": "offline"  // SPLICE THIS OUT
          }
        ],
        "user3": [
          {
            "desc": "whatever",
            "Id": 972878784
          }
        ]
      }
    };

function deleteUser(id) {
    Object.keys(obj.User).forEach(user => {
        obj.User[user] = obj.User[user].filter(u => u.Id !== id);
        if (obj.User[user].length === 0) {
            delete obj.User[user];
        }  
    });
}
deleteUser(963346121);
console.log(obj);
deleteUser(972878784);
console.log(obj);

关于Javascript:拼接多维对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47713882/

相关文章:

javascript - THREE.js 处理 gltf 对象

javascript - 在 ReactJs 中渲染对象数组

c - 卡在写 c 代码,请考虑给我指导

java - Arrays.asList 是否违反了 Liskov 替换原则?

c - 动态二维数组,无内存

java - 我有 2 个不同的类想要添加到 ArrayList 中,定义 ArrayList 的最佳方法是什么?

javascript - 当我将对象插入数组时要添加的字符串

javascript - 包含已更新变量的文件,并且其他文件看到该更改?

javascript - 在 CodeMirror textarea 中放置超链接

javascript - 为数组中的每个对象添加属性