javascript - 使用 javascript 搜索嵌套对象中的特定值并返回仅包含搜索到的项目的更新后的原始对象

标签 javascript

使用 javascript 搜索嵌套对象中的特定值并返回更新后的原始对象(仅包含搜索到的项目)

 var people= {
      "i": [
        {
          "country": "Australia",
          "list": [
            {
              "name": "ABC   ",
              "address": "AB street ",
            }
          ]
        },
        {
          "country": "Brazil",
          "list": [
            {
              "name": "XZ   ",
              "address": "AB street "
            },
           ...
          ]
        }
      ]
     ...
    };

我想按名称搜索。

最佳答案

使用函数Object.keys()并在key === searchedText时打破最深的循环。

var pages = {  "1": [{    "title": "Australia",    "list": [{        "key": "Base1",        "label": "Base-label",        "description": "description"      },      {        "key": "Base1",        "label": "Base-label",        "description": "description"      }    ]  }],  "2": [{      "title": "Australia",      "list": [{          "key": "Base1",          "label": "Base-label",          "description": "description"        },        {          "key": "Base1",          "label": "Base-label",          "description": "description"        },        {          "key": "Base1",          "label": "Base-label",          "description": "description"        }      ]    },    {      "title": "Netherlands",      "list": [{          "key": "Base1",          "label": "Base-label",          "description": "description"        },        {          "key": "Base2",          "label": "Base-label",          "description": "description"        },        {          "key": "Base1",          "label": "Base-label",          "description": "description"        }      ]    }  ],  "3": [{      "title": "Usa",      "list": [{          "key": "Base2",          "label": "Base-label",          "description": "description"        },        {          "key": "Base1",          "label": "Base-label",          "description": "description"        }      ]    },    {      "title": "Canada",      "list": [{          "key": "Base1",          "label": "Base-label",          "description": "description"        },        {          "key": "Base1",          "label": "Base-label",          "description": "description"        },        {          "key": "Base2",          "label": "Base-label",          "description": "description"        }      ]    }  ]};

var filteredPages = {};
var searchedText = "Base2";
for (var k of Object.keys(pages)) {
  for (var o of pages[k]) {
    for (var io of o.list) {
      if (io.key.toLowerCase().indexOf(searchedText.toLowerCase()) !== -1)  {
        filteredPages[k] = filteredPages[k] || [];
        filteredPages[k].push({
          title: o.title,
          list: [io]
        });
      }
    }
  }
}

console.log(filteredPages)
.as-console-wrapper {
  max-height: 100% !important;
  top: 0;
}

关于javascript - 使用 javascript 搜索嵌套对象中的特定值并返回仅包含搜索到的项目的更新后的原始对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48864490/

相关文章:

javascript - 是否有一种通用的跨浏览器方式来使用 JavaScript 使 div 一直向下滚动?

javascript - myDiv.style.display 在主样式表中设置时返回空白

javascript - 使用javascript获取完整的信用卡数据

JavaScript - 'this.form' 返回未定义

javascript - 尝试将文本附加到 Else If 中的 DIV 时,无法读取 Null 的 "classList"属性

javascript - Meteor Account 禁用网站创建帐户功能

javascript - 循环数组仅捕获第一个元素后,在一个文本字段上在线获取多个数据 仅 JavaScript

javascript - ExtJS:全局函数在页面加载之前执行。怎么拖延?

javascript - 使用 JSON Api URL EmberJS

javascript - 如何在javascript中重复一个函数?