比较两个数字数组并返回最高值的数组

时间:2015-09-18 16:24:18

标签: javascript arrays lodash

比较两个整数数组并返回每个数组中较高对应整数的唯一数组的最有效方法是什么?

(可以使用lodash)

例如:

var arr1 = [0, 1, 2, 1, 0];
var arr2 = [1, 0, 0, 3, 0];

// result = [1, 1, 2, 3, 0];

5 个答案:

答案 0 :(得分:3)

这是我的第一个效率较低的方法:

var arr1 = [0, 1, 2, 1, 0];
var arr2 = [1, 0, 0, 3, 0];

arr1.map(function (item, i) {
  return Math.max(item, arr2[i])
}); // [1, 1, 2, 3, 0]

它缺乏速度,它在美丽中获得了!

或者对于你们ES6的掠夺者:

var arr1 = [0, 1, 2, 1, 0];
var arr2 = [1, 0, 0, 3, 0];

arr1.map((item, i) => Math.max(item, arr2[i])); // [1, 1, 2, 3, 0]

答案 1 :(得分:2)

function selectHighestValues (arr1, arr2) {
  var minLength = Math.min(arr1.length, arr2.length);
  var maxLength = Math.max(arr1.length, arr2.length);
  var longestArrayIndex = arr1.length > arr2.length ? 0 : 1;
  var _arr = [];
  for (var i = 0; i < minLength; i++) {
    _arr[i] = Math.max(arr1[i], arr2[i]);
  }
  if (maxLength > minLength) {
    var sliced = Array.prototype.slice.call(arguments[longestArrayIndex], minLength, maxLength);
    _arr = Array.prototype.concat.call(_arr, sliced);
  }
  return _arr;
}

使用拼接最长的数组和连接:

{{1}}

答案 2 :(得分:1)

蛮力!

function selectHighestValues (arr1, arr2) {
  var maxLength = Math.max(arr1.length, arr2.length);
  var _arr = [];
  for (var i = 0; i < maxLength; i++) {
    if (arr1[i] && arr2[i]) {
      _arr[i] = Math.max(arr1[i], arr2[i]);
    } else if (arr1[i]) {
      _arr[i] = arr1[i]; 
    } else {
      _arr[i] = arr2[i]; 
    }

  }
  return _arr;
}

答案 3 :(得分:1)

_.zipWith(arr1, arr2, function(el1, el2) {
    return (el1 > el2 ? el1 : el2);
});

_.zipWith()仅限于lodash 3.x我相信。

答案 4 :(得分:0)

使用zip()map()max()

_.map(_.zip(arr1, arr2), _.ary(_.max, 1));