繁体   English   中英

从JavaScript中的数组数组获取唯一的datetime字符串值

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

使用mapSet解决方案

您可以映射到数组以获取日期:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM