Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用VueJS或javascript在多维数组中搜索_Javascript_Arrays_Multidimensional Array_Vue.js_Frontend - Fatal编程技术网

如何使用VueJS或javascript在多维数组中搜索

如何使用VueJS或javascript在多维数组中搜索,javascript,arrays,multidimensional-array,vue.js,frontend,Javascript,Arrays,Multidimensional Array,Vue.js,Frontend,我正在从事一个Vue项目,我刚刚接触Vue JS,我的问题是如何在输入值时返回id为1的所有数据。下面是我的数据结构示例 { 'A': [{ 1: [{ id: 1, name: 'John' }], 2: [{ id: 5, name: 'Ken' }] }], 'B': [{ 1: {

我正在从事一个Vue项目,我刚刚接触Vue JS,我的问题是如何在输入值时返回id为1的所有数据。下面是我的数据结构示例

 {
    'A': [{
        1: [{
            id: 1, 
            name: 'John'
        }],
        2: [{
            id: 5,
            name: 'Ken'
        }]
    }],
    'B': [{
        1: {
            id: 1,
            name: 'Leena'
        }
    }],
    'C': [{
        1: [{
            id: 1,
            name: 'Jesica'
        }],
        2: [{
            id: 18,
            name: 'Mike'
        }]
    }]
}
预期结果应为(如下),因为它们都具有相同的id值

{
    'A': [{
        1: [{
            id: 1, 
            name: 'John'
        }]
    }],
    'B': [{
        1: {
            id: 1,
            name: 'Leena'
        }
    }],
    'C': [{
        1: [{
            id: 1,
            name: 'Jesica'
        }]
    }]
}

如果您可以控制数据结构的格式,我会将其更改为更易于管理的格式。例如,将每个大写字母属性设置为对象数组:

let dataset = { 
  'A': [{id: 1, name: 'John'}, {id: 2, name: 'Sally'}],
  'B': [{id: 1, name: 'Bob'}],
  ...
}
更好的做法是将数据结构设置为一个对象数组,其中大写字母作为
属性值,id名称对象作为
属性值(或任何对您有意义的内容):

使用此结构,通过特定id过滤数据将相对简单:

function filterObject(foo, id) {
  return foo.map(i => i.people.filter(j => j.id == id));
}


如果您真的需要使用您提供的疯狂数据结构,这里有一个函数可以满足您的需要:

let filterObject = function(foo, id) {
  let bar = {};

  Object.keys(foo).map((key) => {
    for (let i = 0; i < foo[key].length; i++) {
      Object.keys(foo[key][i]).map((index) => {
        for (let j = 0; j < foo[key][i][index].length; j++) {
          if (foo[key][i][index][j].id != id) {
            continue;
          }

          if (!bar[key]) {
            bar[key] = [];
          }
          if (!bar[key][i]) {
            bar[key][i] = {};
          }
          if (!bar[key][i][index]) {
            bar[key][i][index] = [];
          }

          bar[key][i][index][j] = foo[key][i][index][j];
        }
      })
    }
  });

  return bar
}
let filterObject=function(foo,id){
设bar={};
Object.keys(foo.map)((key)=>{
for(设i=0;i{
for(设j=0;j

如果您可以控制数据结构的格式,我会将其更改为更易于管理的格式。例如,将每个大写字母属性设置为对象数组:

let dataset = { 
  'A': [{id: 1, name: 'John'}, {id: 2, name: 'Sally'}],
  'B': [{id: 1, name: 'Bob'}],
  ...
}
更好的做法是将数据结构设置为一个对象数组,其中大写字母作为
属性值,id名称对象作为
属性值(或任何对您有意义的内容):

使用此结构,通过特定id过滤数据将相对简单:

function filterObject(foo, id) {
  return foo.map(i => i.people.filter(j => j.id == id));
}


如果您真的需要使用您提供的疯狂数据结构,这里有一个函数可以满足您的需要:

let filterObject = function(foo, id) {
  let bar = {};

  Object.keys(foo).map((key) => {
    for (let i = 0; i < foo[key].length; i++) {
      Object.keys(foo[key][i]).map((index) => {
        for (let j = 0; j < foo[key][i][index].length; j++) {
          if (foo[key][i][index][j].id != id) {
            continue;
          }

          if (!bar[key]) {
            bar[key] = [];
          }
          if (!bar[key][i]) {
            bar[key][i] = {};
          }
          if (!bar[key][i][index]) {
            bar[key][i][index] = [];
          }

          bar[key][i][index][j] = foo[key][i][index][j];
        }
      })
    }
  });

  return bar
}
let filterObject=function(foo,id){
设bar={};
Object.keys(foo.map)((key)=>{
for(设i=0;i{
for(设j=0;j

这是一个奇怪的数据结构。每个对象属性是否总是包含一个仅包含一个对象的数组?不,这只是一个示例,只要输入值等于我要搜索的字段值,它就可以返回多个数组。所以,假设您的对象名为“foo”。你的意思是
foo['A'][0][1]
可能是一个由许多对象组成的数组,你想在过滤后的数组中返回任何一个
id==1
的对象吗?正是@thanksd,这是我在我的应用程序上尝试做的事情。你只需要按对象属性名称过滤对象数组吗?这就是你的应用程序中的情况,它没有使用这种疯狂的数据结构。这是一种奇怪的数据结构。每个对象属性是否总是包含一个仅包含一个对象的数组?不,这只是一个示例,只要输入值等于我要搜索的字段值,它就可以返回多个数组。所以,假设您的对象名为“foo”。你的意思是
foo['A'][0][1]
可能是一个由许多对象组成的数组,你想在过滤后的数组中返回任何一个
id==1
的对象吗?正是@thanksd,这是我在我的应用程序上尝试做的事情。你只需要按对象属性名称过滤对象数组吗?这就是你的应用程序中的情况,它没有使用这种疯狂的数据结构。@PenAndPapers请参阅我的更新答案,以了解如何更改你的数据结构,使过滤功能更强大simpler@PenAndPapers请参阅我的更新答案,以了解如何更改数据结构,使过滤功能更简单