我想根据嵌套数组中的值返回多维数组

时间:2017-11-20 22:37:49

标签: javascript arrays object

我正在使用react-native和redux构建搜索功能。在我的动作创作者中,我将从Firebase返回一个json。然后我将json变成一个数组:

 const myObj = snapshot.val(); //json 
 const array1 = Object.entries(myObj).map(function(key) {
    return (key);
  });

这样我可以通过array1过滤()。

const array2 = array1.filter(
    (value) => {
      const element = "John Deere"; // I've hard coded the user input 

    return (value.indexOf(element) !== -1);
  });

但是,array1是一个多维数组。因此,此filter()无权访问嵌套数组。如果我像这样创建一个数组copy1,它将具有访问权限:

  const copy1 = [];
  const len = array1.length;
  for (let i = 0; i < len; i++) {
  copy1.push(array1[i][1]);
  }

但后来我无法访问

array1[i][0]. 

该索引是Firebase创建的唯一ID。我需要确保我的数据不会混淆。

有没有办法将.filter()一个特定的数组索引(array1 [i] [1]),但要返回特定索引与条件匹配的完整数组?

(array1 [i] where array1 [i][1] matches the user input(element))

我不能回复:

array1 [i][j]

因为array1 [i] [0]只是一个字符串而不是一个对象(键值对),所以会导致错误。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

filter()

变化:

return (value.indexOf(element) !== -1);

return (value[specifiedIndex].indexOf(element) !== -1);

OR

return value[specifiedIndex].includes(element);

答案 1 :(得分:0)

这是有效的:

const array2 = array1.filter(
    (value) => {
      const element = "John Deere";
      for (let i = 0; i < len; i++) {
     return (value[1].make.indexOf(element) !== -1);
       }
     });

这当然只适用于“make”键。但我确信可以使用|| filter函数中的operator包含更多键。