[英]Get unique datetime string value from array of arrays in javascript
I want to loop over an array of arrays structure in order to filter out the duplicate datetime string values, and push the unique datetime string values sorted in a new array. 我想遍历数组结构的数组,以过滤出重复的datetime字符串值,并推送按新数组排序的唯一datetime字符串值。 I have tried to use a nested forEach()
method in order to compare each current key value with all the key values inside the array arr
, and push them inside the res
array in case of non matching situation, but it seems not working properly. 我尝试使用嵌套的forEach()
方法,以便将每个当前键值与数组arr
内的所有键值进行比较,并在不匹配的情况下将它们推入res
数组内,但它似乎无法正常工作。
Here the array of arrays structure 这里的数组数组结构
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]
];
What I want to obtain as result 我想从结果中得到什么
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"];
Can someone give me some tips on order to understand how to proceed? 有人可以给我一些提示以了解如何进行吗?
I would map the array of arrays to just an array of date strings: 我将数组数组映射为仅日期字符串数组:
arr = arrayOfArrays.map(x => x[1])
then if you convert it to set you get unique values 然后,如果将其转换为设置,您将获得唯一的值
var set = new Set(arr)
if needed you can eventually turn it back to array 如果需要,您最终可以将其转回数组
var uniq = Array.from(set)
for sorting 用于分类
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
and Set
使用map
和Set
解决方案 You can map over the array to pluck the dates: 您可以映射到数组以获取日期:
const dates = arr.map(item => item[1]);
then you can put them in a new Set
which is an array that holds only unique items. 那么您可以将它们放入new Set
,该new Set
是一个仅包含唯一项的数组。 calling .values
on the created set will return its results. 在创建的集合上调用.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))
You can read more about sets here on MDN 您可以在MDN上阅读有关集合的更多信息
Here is an image to better conceptualize the idea of the "functional style" map/filter/reduce
array functions (filter is where you'd ommit the onions) : 这是一张更好地概念化“函数样式” map/filter/reduce
数组函数(过滤器是省略洋葱的地方)概念的图像 :
Image Source: https://twitter.com/francesc/status/507942534388011008 图片来源: https : //twitter.com/francesc/status/507942534388011008
I just want to answer with the helper of lodash . 我只想和lodash的助手回答。 I just believe this is still relevant. 我只是相信这仍然有意义。
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;
});
You can try below code to get your desired output. 您可以尝试以下代码来获得所需的输出。
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.