【问题标题】:search in nested array of objects js在嵌套的对象数组中搜索js
【发布时间】:2020-06-11 23:50:24
【问题描述】:

我有一个嵌套的对象数组,我试图在其中找到一个字符串。一旦我找到它,我想返回包含对象。 这是我的代码:

const myArray = [{
    label: "Home",
    last: "odlir",
    children: [{
        label: "Home 1",
        last: "odlir1",
        children: [{
          label: "Home 2",
          last: "odlir2"
        }, {
          label: "Home 3",
          last: "odlir3"
        }]
      },
      {
        label: "Home 4",
        last: "odlir4",
        children: [{
          label: "Home 5",
          last: "odlir5"
        }, {
          label: "Home 6",
          last: "odlir6"
        }]
      }
    ]
  },
  {
    label: "dash",
    last: "gom"
  },
  {
    label: "principal",
    last: "asd"
  }
];

function contain(obj, string) {
  if (obj == null)
    return false;

  if (obj.last == string)
    return obj;

  if (typeof obj.children == 'undefined')
    return false;

  for (let i = 0; i < obj.children.length; i++) {
    if (contain(obj.children[i], string))
      return obj;
  }
  return false;
}

function getObject(array, string) {
  for (let i = 0; i < array.length; i++) {
    if (contain(array[i], string)) {
      return array[i];
    }
  }
}

console.log('test', getObject(myArray, 'odlir6'));

我正在取回我想要的对象,父对象甚至祖父。 这是这段代码的堆栈闪电:https://stackblitz.com/edit/js-hgchmx

【问题讨论】:

  • 你想要什么数组?索引还是外部数组?
  • 这能回答你的问题吗? JavaScript recursive search in JSON object
  • @HereticMonkey 谢谢我会试试这个答案
  • @NinaScholz 实际上我想要包含我正在寻找的字符串的对象

标签: javascript arrays object recursion


【解决方案1】:

您可以采用递归方法并为每个嵌套调用存储 paren 对象。

  1. 声明result,稍后此变量包含父对象。

  2. 检查给定变量是否不是null而是一个对象。没有就退出。

  3. 通过短路迭代对象的值并

    • 检查值是否等于想要的字符串,然后返回对象的赋值。
    • 否则返回递归调用的结果。

function getObject(object, string) {
    var result;
    if (!object || typeof object !== 'object') return;
    Object.values(object).some(v => {
        if (v === string) return result = object;
        return result = getObject(v, string);
    });
    return result;
}

const
    array = [{ label: "Home", last: "odlir", children: [{ label: "Home 1", last: "odlir1", children: [{ label: "Home 2", last: "odlir2" }, { label: "Home 3", last: "odlir3" }] }, { label: "Home 4", last: "odlir4", children: [{ label: "Home 5", last: "odlir5" }, { label: "Home 6", last: "odlir6" }] }] }, { label: "dash", last: "gom" }, { label: "principal", last: "asd" }];

console.log(getObject(array, 'odlir6'));

【讨论】:

  • 感谢您的帮助,这几乎就是我想要得到的只是 { "label": "Home 6", "last": "odlir6" }
  • 它可以工作,谢谢,但是你能解释一下你的代码吗?
猜你喜欢
  • 2021-08-07
  • 2018-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多