如何比较数组的值,如果它们相等则将它们设为1

时间:2019-10-14 17:17:20

标签: javascript arrays sorting

嗨,我想比较数组中的值,如果它们相同,我希望将它们视为一个。

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代码来帮助我。谢谢!

5 个答案:

答案 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]