嗨,我想比较数组中的值,如果它们相同,我希望将它们视为一个。
var arrA = [1,1,1,1,2,2,2,3,3,4,4]
var arrB = [0.1,0.1,0.1,0.1 ,0.2,0.2,0.2 ,0.3,0.3 ,0.4,0.4]
我想做的是如果arrA[i] == arrA[i+1]
比较arrA的值,那么它应该将其视为一个值,并且在arrB中arrB[i]
的值与arrB[i+1]
相加。
我的最终数组如下所示:
var arrA = [1,2,3,4]
var arrB = [0.4,0.6,0.6,0.8]
任何人都可以通过JavaScript代码来帮助我。谢谢!
答案 0 :(得分:2)
您可以缩小数组并检查先前的值是否等于实际值。
function sumSame(arrayA, arrayB) {
var i,
l = arrayA.length,
resultA = [],
resultB = [];
for (i = 0; i < l; i++) {
if (arrayA[i] === arrayA[i - 1]) {
resultB[resultB.length - 1] += arrayB[i];
} else {
resultA.push(arrayA[i]);
resultB.push(arrayB[i]);
}
}
return [resultA, resultB];
}
console.log(sumSame(
[1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4],
[0.1, 0.1, 0.1, 0.1, 0.2, 0.2, 0.2, 0.3, 0.3, 0.4, 0.4]
));
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:1)
您可以使用reduce
方法创建一个函数,该函数需要一个数组以及一个可以设置为true或false的参数,并可以基于该参数过滤重复项或求和。
const transform = (data, sum = false) => data.reduce((r, e, i) => {
if (e != data[i - 1]) r.push(e)
else {
if (sum) r[r.length - 1] += e
}
return r;
}, []);
console.log(transform([1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4]));
console.log(transform([0.1, 0.1, 0.1, 0.1, 0.2, 0.2, 0.2, 0.3, 0.3, 0.4, 0.4], true));
答案 2 :(得分:0)
对于arrA
,您可以如下使用Set
const arr = [1,2,3,4,1,2,3,4.....];
const uniqueArr= Array.from(new Set(arr));
答案 3 :(得分:0)
如果不使用数组以外的其他任何对象,则用于问题的第一部分
const arrA = [1,1,1,1,2,2,2,3,3,4,4]
const arrAUnique = arrA
.sort((a, b) => a - b)
.filter((v, ind, arr) => v !== arr[ind - 1])
仅使用数组的第二个问题解决方案
var arrB = [0.1,0.1,0.1,0.1 ,0.2,0.2,0.2 ,0.3,0.3 ,0.4,0.4]
var arrBSum = arrB
.sort((a, b) => a - b)
.reduce((newArr, v, ind, arr) => {
if (v !== arr[ind - 1]) {
newArr.push(v)
} else {
newArr[newArr.length - 1] += v
}
return newArr
}, [])
答案 4 :(得分:0)
这可能是一个干净的解决方案
// Find unique
const unique = arrA.reduce((result, curr) => {
if(result.indexOf(curr)===-1) result.push(curr);
return result
},[])
console.log(unique)//[1, 2, 3, 4]
//Find sum using reduce
var sum = (a, b) => a+b
var data = arrB.reduce((result, curr) => {
if(!result[curr]) result[curr] = []
result[curr].push(curr);
return result
},{})
var arrSum = Object.keys(data).map(key => data[key].reduce(sum).toFixed(1))
console.log(arrSum) //[0.4,0.6,0.6,0.8]