JavaScript-过滤字符串数组

时间:2020-05-22 00:16:19

标签: javascript arrays filter

我有一个数组数组,这些数组是从csv文件返回的。我试图根据数组中的标题来过滤出数组的每个索引。例如:

如果数组的索引名为“零售”,则返回包含某些值的整个索引。

这是我的数组:

[     
    ​​[
     "Retail",
    ​​
     "22,477",
    ​​
     "24,549",
    ​​
     "19,580",
    ​​
     "15,358",
    ​​],       ​    ​
     [ 
      "Online", 

      "8,653", 

      "7,586",

      "2,432",

      "4,321"
    ],

     [ 
         "In Store", 

          "2,532", 

          "2,836", 

          "5,632",

          "7,325" 
     ]
]

我尝试了这两种单独的方式,并且都返回0数组:

filtArr = dataList.filter(name => name.includes('Retail')) //expecting the array length 5 with "Retail" and it's values

尝试2

 filtArr = dataList.filter(function (name) {
    return (name === "Retail")
})

预期收益为:console.log(filtArr) // [ 0. "Retail", 1. "22,477", 2. "24,549", 3. "19,580", 4. "15,358"

2 个答案:

答案 0 :(得分:3)

检查数组是否包含某些项目的一种好方法是使用indexOf方法对其进行测试。 如果找不到该项目或其索引,它将返回-1。

您可以执行以下操作以在其中存储所有包含“零售”的数组:

let retailArrays = [];
arrayOfArrays.forEach( 
    array => {
        if( array.indexOf('Retail') !== -1) {
        retailArrays.push(array);
        };
    }
)

答案 1 :(得分:1)

您显然在某些名称后面有空格,因此"Retail"实际上是"Retail "

看起来名称也始终是嵌套数组的第一个元素,因此无需搜索整个数组。

因此,在第一个元素上使用trim()删除周围的空格。

filtArr = dataList.filter(arr => arr[0].trim() == 'Retail');

var dataList = [
  [
    "Retail",
    "22,477",
    "24,549",
    "19,580",
    "15,358",
  ],
  [
    "Online",
    "8,653",
    "7,586",
    "2,432",
    "4,321"
  ],
  [
    "In Store",
    "2,532",
    "2,836",
    "5,632",
    "7,325"
  ]
];
filtArr = dataList.filter(arr => arr[0].trim() == 'Retail');
console.log(filtArr);