【问题标题】:How can I remove objects from the array如何从数组中删除对象
【发布时间】:2021-04-12 05:58:53
【问题描述】:

最初我有这个 json,我需要在“名称”中留下:[] 只有那些名称不重复的对象

{
        "type": "city",
        "names": [
            {
                "name": "Citi1",
                "index": 0,
                "names": [
                    0,
                    1,
                    4
                ]
            },
            {
                "name": "Citi1",
                "index": 1,
                "names": [
                    0,
                    1,
                    4
                ]
            },
            {
                "name": "Citi2",
                "index": 2,
                "names": [
                    2,
                    3
                ]
            },
            {
                "name": "Citi1",
                "index": 4,
                "names": [
                    0,
                    1,
                    4
                ]
            }
        ]

如何从 ["names"] 数组中删除带有重复 "name" 的对象?

例如,我需要删除 citi1 重复的对象,只保留其中 1 个 预期对象

{
        "type": "city",
        "names": [
            {
                "name": "Citi1",
                "index": 0,
                "names": [
                    0,
                    1,
                    4
                ]
            },
            {
                "name": "Citi2",
                "index": 2,
                "names": [
                    2,
                    3
                ]
            },
           
        ]


我尝试过的代码

 for(let i = 0; i < queueTypes.length; i++){
queueTypes[i]["names"].forEach(  function (item, index) {
                   
                    let tmpIndex = index;

                    for(let j = 0; j < queueTypes[i]["names"].length; j++){
                         if(queueTypes[i]["names"][j].name == item.name){
                             if( tmpIndex != j ){
                     
                                delete queueTypes[i]["names"][j]

                             }
                        }
                    }
                });
}

试图遍历这个数组并检查名称是否相同,但索引与我正在检查的元素不匹配

【问题讨论】:

  • 到目前为止你尝试过什么?请向我们展示您的尝试

标签: javascript json for-loop object


【解决方案1】:

要根据 names 数组中的 name 键过滤重复对象,您可以存储唯一名称的映射并过滤掉映射中已有的任何名称。

const myData = {
  "type": "city",
  "names": [
      {
          "name": "Citi1",
          "index": 0,
          "names": [
              0,
              1,
              4
          ]
      },
      {
          "name": "Citi1",
          "index": 1,
          "names": [
              0,
              1,
              4
          ]
      },
      {
          "name": "Citi2",
          "index": 2,
          "names": [
              2,
              3
          ]
      },
      {
          "name": "Citi1",
          "index": 4,
          "names": [
              0,
              1,
              4
          ]
      }
  ]
};

const transform = data => {
  const unique = {};

  return {
    ...data,
    names: data.names.filter(({ name }) => {
      if (unique[name]) {
         return false;
       } else {
         unique[name] = true;
         return true;
       }
     })
  };
};

console.log(transform(myData));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-16
    • 2017-06-15
    • 2023-03-03
    • 2017-03-10
    • 2023-01-30
    • 1970-01-01
    • 2012-05-12
    相关资源
    最近更新 更多