[英]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.