如何根据子数组元素状态拆分数组?
How do i split an array based on subarray element state?
我有一个由子数组组成的数组:
myArray = [[info1, info2, info3, value1], [info1, info2, info3, value1],
[info1, info2, info3, value1],.............]
我想根据"value1"将数组拆分成几个数组。如果 value1 在超过 5 个连续元素中高于 1000,我想创建一个新数组:
mySubArray1 = [[info1, info2, info3, 1011], [info1, info2, info3,
1012], [info1, info2, info3, 1011],.............]
因此,如果我发现第二个元素系列,其中 value1 在超过 5 个连续元素中高于 1000,我想创建另一个数组:
mySubArray2 = [[info1, info2, info3, 3030], [info1, info2, info3,
4000], [info1, info2, info3, 1700],.............]
我所做的如下:
var j;
for (j = 0; j < array.length; j++) {
if (array[j][3] < 1000 ) {
console.log("below 1000");
}
else {
console.log("above 1000");
}
}
这会检测到值高于 1000 的位置,但现在我需要将其排序到新数组中,但我不知道如何开始该过程。
您应该能够执行 Array.reduce 以获得所需的结果:
我正在生成一个应该与您的输入类似的数组,'value1' 的值将介于 995 和 1010 之间。
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
let myArray = [...Array(100).keys()].map(n => ['info1', 'info2', 'info3', getRandomInt(995, 1010)]);
console.log("Input: ", JSON.stringify(myArray));
let subArray = [];
// Result will contain a list of our new subarrays.
let result = myArray.reduce((acc, val, index) => {
if (val[3] >= 1000) {
subArray.push(val);
}
if ((val[3] < 1000) || (index === myArray.length - 1) /* Handle the case when we're at the end of myArray */ ) {
if (subArray.length > 5) {
acc.push(subArray);
}
subArray = [];
}
return acc;
}, [])
console.log("Result:");
result.forEach( (subArray, n) => console.log(`Subarray ${n+1}: `, subArray));
我有一个由子数组组成的数组:
myArray = [[info1, info2, info3, value1], [info1, info2, info3, value1],
[info1, info2, info3, value1],.............]
我想根据"value1"将数组拆分成几个数组。如果 value1 在超过 5 个连续元素中高于 1000,我想创建一个新数组:
mySubArray1 = [[info1, info2, info3, 1011], [info1, info2, info3,
1012], [info1, info2, info3, 1011],.............]
因此,如果我发现第二个元素系列,其中 value1 在超过 5 个连续元素中高于 1000,我想创建另一个数组:
mySubArray2 = [[info1, info2, info3, 3030], [info1, info2, info3,
4000], [info1, info2, info3, 1700],.............]
我所做的如下:
var j;
for (j = 0; j < array.length; j++) {
if (array[j][3] < 1000 ) {
console.log("below 1000");
}
else {
console.log("above 1000");
}
}
这会检测到值高于 1000 的位置,但现在我需要将其排序到新数组中,但我不知道如何开始该过程。
您应该能够执行 Array.reduce 以获得所需的结果:
我正在生成一个应该与您的输入类似的数组,'value1' 的值将介于 995 和 1010 之间。
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
let myArray = [...Array(100).keys()].map(n => ['info1', 'info2', 'info3', getRandomInt(995, 1010)]);
console.log("Input: ", JSON.stringify(myArray));
let subArray = [];
// Result will contain a list of our new subarrays.
let result = myArray.reduce((acc, val, index) => {
if (val[3] >= 1000) {
subArray.push(val);
}
if ((val[3] < 1000) || (index === myArray.length - 1) /* Handle the case when we're at the end of myArray */ ) {
if (subArray.length > 5) {
acc.push(subArray);
}
subArray = [];
}
return acc;
}, [])
console.log("Result:");
result.forEach( (subArray, n) => console.log(`Subarray ${n+1}: `, subArray));