来自具有条件的数组的新数组......
New array from array with a condition …
我要改造:
a = [0.25, 0.375, 0.5, 0.5, 0.5]
进入:
a2 = [
[0.25, 0.375],
[0.5, 0.5],
[0.5]
]
– 其中每行数组项的总和 <= 1
我想一些切片、减少处理就可以了,但我只是不知道在哪里插入条件……有什么帮助吗?
const a = [0.25, 0.375, 0.5, 0.5, 0.5];
const result = a.reduce(
(acc, val) => {
const last = acc[acc.length - 1];
if (last.reduce((a, v) => a + v, 0) + val <= 1) {
last.push(val);
} else {
acc.push([val]);
}
return acc;
},
[[]],
);
console.log(result);
var s = 0;
var start = 0;
var a2 = [];
for (var i = 0; i<a.length; i++) {
if (s+a[i] <= 1) {
s+=a[i];
}
else {
if (i == start) {
a2.push(a.slice(i,i);
}
else {
a2.push(a.slice(start, i-1);
}
s = a[i]
start = i;
}
}
您可以使用约束函数来减少数组。
const
add = (a, b) => a + b,
constraint = sum => sum <= 1,
array = [0.25, 0.375, 0.5, 0.5, 0.5],
result = array.reduce((r, v) => {
let last = r[r.length - 1];
if (!last || !constraint(last.reduce(add) + v)) r.push(last = []);
last.push(v);
return r;
}, []);
console.log(result);
我要改造:
a = [0.25, 0.375, 0.5, 0.5, 0.5]
进入:
a2 = [
[0.25, 0.375],
[0.5, 0.5],
[0.5]
]
– 其中每行数组项的总和 <= 1
我想一些切片、减少处理就可以了,但我只是不知道在哪里插入条件……有什么帮助吗?
const a = [0.25, 0.375, 0.5, 0.5, 0.5];
const result = a.reduce(
(acc, val) => {
const last = acc[acc.length - 1];
if (last.reduce((a, v) => a + v, 0) + val <= 1) {
last.push(val);
} else {
acc.push([val]);
}
return acc;
},
[[]],
);
console.log(result);
var s = 0;
var start = 0;
var a2 = [];
for (var i = 0; i<a.length; i++) {
if (s+a[i] <= 1) {
s+=a[i];
}
else {
if (i == start) {
a2.push(a.slice(i,i);
}
else {
a2.push(a.slice(start, i-1);
}
s = a[i]
start = i;
}
}
您可以使用约束函数来减少数组。
const
add = (a, b) => a + b,
constraint = sum => sum <= 1,
array = [0.25, 0.375, 0.5, 0.5, 0.5],
result = array.reduce((r, v) => {
let last = r[r.length - 1];
if (!last || !constraint(last.reduce(add) + v)) r.push(last = []);
last.push(v);
return r;
}, []);
console.log(result);