【发布时间】:2019-04-18 02:04:02
【问题描述】:
我在一个主/父数组中有多个数组,如下所示:
var arr = [
[1, 17],
[1, 17],
[1, 17],
[2, 12],
[5, 9],
[2, 12],
[6, 2],
[2, 12],
[2, 12]
];
我有代码可以选择重复 3 次或更多次 (> 3) 的数组并将其分配给变量。
代码是:
var arr = [[1, 17], [1, 17], [1, 17], [2, 12], [5, 9], [2, 12], [6, 2], [2, 12]]
arr.sort((a, b) => a[0] - b[0] || a[1] - b[1])
// define equal for array
const equal = (arr1, arr2) => arr1.every((n, j) => n === arr2[j])
let GROUP_SIZE = 3
first = 0, last = 1, res = []
while(last < arr.length){
if (equal(arr[first], arr[last])) last++
else {
if (last - first >= GROUP_SIZE) res.push(arr[first])
first = last
}
}
if (last - first >= GROUP_SIZE) res.push(arr[first])
console.log(res)
所以最终的结果是:
console.log(repeatedArrays);
>>> [[1, 17], [2, 12]]
我的问题:但问题是,我有一个这样的数组{from: [12, 0], to: [14, 30]}。
var arr = [
[1, 17],
[1, 17],
[1, 17],
[2, 12],
[5, 9],
[2, 12],
[6, 2],
{from: [12, 0], to: [14, 5]},
{from: [12, 0], to: [14, 5]},
{from: [4, 30], to: [8, 20]},
{from: [12, 0], to: [14, 5]},
{from: [4, 30], to: [8, 20]},
[2, 12],
[2, 12]
];
当我尝试使用上面的代码时,它不起作用。错误信息是:
未捕获的类型错误:arr1.every 不是函数
最终结果应该是:
console.log(repeatedArrays);
>>> [[1, 17], [2, 12], {from: [12, 0], to: [14, 5]}]
我怎样才能使上面的代码工作?
【问题讨论】:
-
您在寻找什么样的逻辑?您是否需要找到完整的
{ from, to }对象的 3 个副本才能将其包含在最终结果中,还是什么? -
你需要传入一个数组。
{from: [12, 0], to: [14, 5]}是一个对象。 -
"...我有一个像这样的数组
{from: [12, 0], to: [14, 30]}" 该对象如何等同于:var array = [ [1, 17], [1, 17], [1, 17], [2, 12], [5, 9], [2, 12], [6, 2], {from: [12, 0], to: [14, 5]}, [2, 12], [2, 12] ];?以及为什么这个对象:{from: [12, 0], to: [14, 5]}如此随意地塞进一个数组数组中?
标签: javascript jquery arrays object ecmascript-6