【问题标题】:Javascript remove redundant in multiarrayJavascript删除多数组中的冗余
【发布时间】:2026-01-29 15:25:01
【问题描述】:

在 javascript 中处理多维数组需要帮助。 示例数组如下: 开始,结束时间,名称。

[04/04/2017 11:00:42,04/04/2018 12:15:37,Nic],
[04/04/2017 11:00:42,04/04/2018 12:16:58,Nic]

结果会是这样的:

[04/04/2017 11:00:42,04/04/2018 12:16:58,Nic]

我们需要比较 2 个索引的第一个索引和最后一个索引,如果匹配则秒索引,因为 endtime 将从最后一个数组中获取。

下面的示例代码删除多余的。但是,当需要比较多个索引并将最后一条记录作为结果时,会感到困惑。

var compare = new Array();var result = new Array();
for (var y = 0; y < list.size(); y++) {
    if(list.indexOf(list[y][0]) < 0){
        compare.push(listdetails[y][0]);
        result.push(listdetails[y]);
    }
}

有人可以帮忙吗?

【问题讨论】:

  • @xianshenglu 是的,正确的。比较开始和名称,然后从最后一条记录中获取结束时间。 [04/04/2017 11:00:42,04/04/2018 12:15:37,Nic], [04/04/2017 11:00:42,04/04/2018 12:16:58,Nic ], [04/04/2017 11:00:42,04/04/2018 13:16:58,Nic], 结果将是 [04/04/2017 11:00:42,04/04/2018 13: 16:58,尼克]

标签: javascript html multidimensional-array


【解决方案1】:

一种选择是使用reduce 将数据汇总到一个对象中。使用Object.values将对象转换为数组。

var arr = [
  ['04/04/2017 11:00:42', '04/04/2018 12:15:37', 'Nic'],
  ['04/04/2017 11:00:42', '04/04/2018 12:16:58', 'Nic'],
  ['04/04/2017 11:00:42', '04/04/2018 12:16:50', 'Apple']
];

var result = Object.values(arr.reduce((c, v) => Object.assign(c, {[v[0]+v[2]]: v}), {}));

console.log(result);

【讨论】:

  • 乐于帮助@shin88
【解决方案2】:

使用reduceObject.values

//method to get the unique key out of an array item which is also an array
var getKey = ( arr ) => arr[0] + arr[2];
var output = Object.values( arr.reduce( (acc, c) => ( 
     acc[getKey(c)] = c,  //set the latest value with the same key to accumulator
     acc ) , //return the accumulator
{})); //initialize accumulator to {} 

演示

var arr = [
  ["04/04/2017 11:00:42", "04/04/2018 12:15:37", "Nic"],
  ["04/04/2017 11:00:42", "04/04/2018 12:16:58", "Nic"]
];

var getKey = ( arr ) => arr[0] + arr[2];
var output = Object.values(arr.reduce((acc, c) => (acc[getKey(c)] = c, acc), {}));

console.log( output );

【讨论】:

    最近更新 更多