簡體   English   中英

使用javascript過濾二維數組

[英]filtering 2d arrays using javascript

我有一個二維數組,我需要在其中過濾具有日期字段(3d 列)的行

var data = [
['1','a','12-12-2019','A'],
['2','b','','A'],
['3','c','12-1-2019','A'],
['4','d','','A'],
];

預期的結果是

result = [
['1','a','12-12-2019','A'],
['3','c','12-1-2019','A'],
];

使用 for 循環進行 comprisons 是時間密集型的,有沒有最快的檢索方法?

我不會擔心使用循環來做到這一點 - 這就是循環的用途。

您可以只使用Array.prototype.filter()來確保每個數組的第二個位置都有一個值,返回它是否為真。

var data = [
  ['1','a','12-12-2019','A'],
  ['2','b','','A'],
  ['3','c','12-1-2019','A'],
  ['4','d','','A'],
];

// Used a classic `function` keyword because you're using this in a Google apps script
const result = data.filter(function(item) {
  return item[2];
});

console.log(result);

只使用 Array.filter 似乎很簡單,檢查日期字段是否為空。

 var data = [ ['1','a','12-12-2019','A'], ['2','b','','A'], ['3','c','12-1-2019','A'], ['4','d','','A'], ]; var filtered = data.filter(e => e[2]); console.log(filtered);

Array#filter方法與Array#some方法一起使用。

 var data = [ ['1', 'a', '12-12-2019', 'A'], ['2', 'b', '', 'A'], ['3', 'c', '12-1-2019', 'A'], ['4', 'd', '', 'A'], ]; // check any of the string matched date pattern let res = data.filter(arr => arr.some(str => /^\\d{1,2}-\\d{1,2}-\\d{4}$/.test(str))) console.log(res)

對於較舊的瀏覽器,您只需使用Array#filter方法即可。

 var data = [ ['1', 'a', '12-12-2019', 'A'], ['2', 'b', '', 'A'], ['3', 'c', '12-1-2019', 'A'], ['4', 'd', '', 'A'], ]; var res = data.filter(function(arr) { // check length of date formated elements return arr.filter(function(str) { return /^\\d{1,2}-\\d{1,2}-\\d{4}$/.test(str) }).length; }); console.log(res)


如果您只想始終檢查第三個元素,則不需要嵌套循環。

 var data = [ ['1', 'a', '12-12-2019', 'A'], ['2', 'b', '', 'A'], ['3', 'c', '12-1-2019', 'A'], ['4', 'd', '', 'A'], ]; var res = data.filter(function(arr) { // check 3rd value is correct date value return /^\\d{1,2}-\\d{1,2}-\\d{4}$/.test(arr[0]) // if value would be empty all other case then simply // return the value since empty values are falsy // return arr[2]; }); console.log(res)

當談到速度時, for循環是最快的,因為您要匹配的值始終處於固定索引,因此您可以直接檢查和值並推送您的數據

 var data = [['1','a','12-12-2019','A'],['2','b','','A'],['3','c','12-1-2019','A'],['4','d','','A'],]; let op = [] for(let i=0; i<data.length; i++){ if(!data[i][2]){ op.push(data[i]) } } console.log(op)

 var data = [ ['1','a','12-12-2019','A'], ['2','b','','A'], ['3','c','12-1-2019','A'], ['4','d','','A'], ]; d = data.filter(i => i[2].match(/\\d\\d?\\-\\d\\d?\\-\\d{4}/)) console.log(d)

如果你真的很在意時間,那就用c++、c、rust什么的吧,順便說一句,JS是最快的解釋型語言。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM