[英]Get unique datetime string value from array of arrays in javascript
我想遍歷數組結構的數組,以過濾出重復的datetime字符串值,並推送按新數組排序的唯一datetime字符串值。 我嘗試使用嵌套的forEach()
方法,以便將每個當前鍵值與數組arr
內的所有鍵值進行比較,並在不匹配的情況下將它們推入res
數組內,但它似乎無法正常工作。
這里的數組數組結構
arr =[
["some_value", "2016-11-23 18:11", 1]
["some_value", "2016-11-23 18:01", 1]
["some_value", "2016-11-23 18:01", 2]
["some_value", "2016-11-23 18:01", 1]
["some_value", "2016-11-23 18:22", 1]
["some_value", "2016-11-23 18:23", 1]
["some_value", "2016-11-23 18:25", 1]
["some_value", "2016-11-23 18:24", 3]
["some_value", "2016-11-23 18:26", 1]
["some_value", "2016-11-23 18:27", 1]
];
我想從結果中得到什么
res = ["2016-11-23 18:01",
"2016-11-23 18:11",
"2016-11-23 18:22",
"2016-11-23 18:23",
"2016-11-23 18:24",
"2016-11-23 18:25",
"2016-11-23 18:26",
"2016-11-23 18:27"];
有人可以給我一些提示以了解如何進行嗎?
我將數組數組映射為僅日期字符串數組:
arr = arrayOfArrays.map(x => x[1])
然后,如果將其轉換為設置,您將獲得唯一的值
var set = new Set(arr)
如果需要,您最終可以將其轉回數組
var uniq = Array.from(set)
用於分類
uniq.sort((a,b)=> new Date(a) - new Date(b))
var arrayOfArrays = [ ["some_value", "2016-11-23 18:11", 1], ["some_value", "2016-11-23 18:01", 1], ["some_value", "2016-11-23 18:01", 2], ["some_value", "2016-11-23 18:01", 1], ["some_value", "2016-11-23 18:22", 1], ["some_value", "2016-11-23 18:23", 1], ["some_value", "2016-11-23 18:25", 1], ["some_value", "2016-11-23 18:24", 3], ["some_value", "2016-11-23 18:26", 1], ["some_value", "2016-11-23 18:27", 1], ]; var arr = arrayOfArrays.map(x => x[1]) var set = new Set(arr) var uniq = Array.from(set) uniq.sort((a,b)=> new Date(a) - new Date(b)) console.log(uniq)
map
和Set
解決方案 您可以映射到數組以獲取日期:
const dates = arr.map(item => item[1]);
那么您可以將它們放入new Set
,該new Set
是一個僅包含唯一項的數組。 在創建的集合上調用.values
將返回其結果。
arr = [ ["some_value", "2016-11-23 18:11", 1], ["some_value", "2016-11-23 18:01", 1], ["some_value", "2016-11-23 18:01", 2], ["some_value", "2016-11-23 18:01", 1], ["some_value", "2016-11-23 18:22", 1], ["some_value", "2016-11-23 18:23", 1], ["some_value", "2016-11-23 18:25", 1], ["some_value", "2016-11-23 18:24", 3], ["some_value", "2016-11-23 18:26", 1], ["some_value", "2016-11-23 18:27", 1], ]; const dates = arr.map(item => item[1]); const result = new Set(dates); console.log('result: ', Array.from(result))
您可以在MDN上閱讀有關集合的更多信息
這是一張更好地概念化“函數樣式” map/filter/reduce
數組函數(過濾器是省略洋蔥的地方)概念的圖像 :
圖片來源: https : //twitter.com/francesc/status/507942534388011008
我只想和lodash的助手回答。 我只是相信這仍然有意義。
var arr =[
["some_value", "2016-11-23 18:11", 1],
["some_value", "2016-11-23 18:01", 1],
["some_value", "2016-11-23 18:01", 2],
["some_value", "2016-11-23 18:01", 1],
["some_value", "2016-11-23 18:22", 1],
["some_value", "2016-11-23 18:23", 1],
["some_value", "2016-11-23 18:25", 1],
["some_value", "2016-11-23 18:24", 3],
["some_value", "2016-11-23 18:26", 1],
["some_value", "2016-11-23 18:27", 1]
];
_.map(_.sortBy(_.uniqBy(arr, v => v[1]), v => v[1]), v => v[1]);
var arr = arr = [
["some_value", "2016-11-23 18:11", 1],
["some_value", "2016-11-23 18:01", 1],
["some_value", "2016-11-23 18:01", 2],
["some_value", "2016-11-23 18:01", 1],
["some_value", "2016-11-23 18:22", 1],
["some_value", "2016-11-23 18:23", 1],
["some_value", "2016-11-23 18:25", 1],
["some_value", "2016-11-23 18:24", 3],
["some_value", "2016-11-23 18:26", 1],
["some_value", "2016-11-23 18:27", 1],
];
var dates = arr.map(x => x[1])
var uniqueArray = dates.filter(function (item, pos) {
return dates.indexOf(item) == pos;
});
您可以嘗試以下代碼來獲得所需的輸出。
function onlyUnique(value, index, self) {
return self.indexOf(value) === index;
}
var arr =[
["some_value", "2016-11-23 18:11", 1],
["some_value", "2016-11-23 18:01", 1],
["some_value", "2016-11-23 18:01", 2],
["some_value", "2016-11-23 18:01", 1],
["some_value", "2016-11-23 18:22", 1],
["some_value", "2016-11-23 18:23", 1],
["some_value", "2016-11-23 18:25", 1],
["some_value", "2016-11-23 18:24", 3],
["some_value", "2016-11-23 18:26", 1],
["some_value", "2016-11-23 18:27", 1]
];
var rest = [];
arr.forEach(function(entry) {
rest.push(entry[1])
});
rest.sort();
var finalArr = rest.filter( onlyUnique );
console.log(finalArr);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.