修改后的原始数组值

时间:2016-04-22 14:47:28

标签: javascript arrays sorting

var a = ["11", "22", "46", "22", "11", "55"];

console.log(a); // [ '11', '22', '46', '22', '11', '55' ]

// Calculates my values
var b = a.map(function(num) {
  return num.split('')
    .map(Number)
    .reduce(function(a, b) {
      return a + b;
    });
});
console.log(b); // [ 2, 4, 10, 4, 2, 10 ]

// Finds my biggest value
var c = 0;
for (var i = 0; i < b.length; i++) {
  if (b[i] > c) {
    c = b[i];
  }
}
console.log(c); // 10

// Sorts my array
var d = b;
d.sort(function(a, b) {
  return a - b;
});
console.log(d); // [ 2, 2, 4, 4, 10, 10 ]

我在这里遇到了问题。 var d告诉我以下数组[ 2, 2, 4, 4, 10, 10 ]。它们最初来自此数组["11","22","46","22","11","55"]。我也在整理它们。所以在var d的最后,我在数组末尾收到了两个10。让我们说d[4]最初来自a[2]d[5]来自a[5]。如何让代码告诉我第一个数组的10个原始值。我们说我们得到2, 2, 4, 4, 10, 10。我希望最后10个右侧值告诉我它来自"55"。我有办法做到这一点吗?

2 个答案:

答案 0 :(得分:2)

a.map上,让它返回一个对象,该对象包含一个包含原始值的属性,以及一个您想要修改的属性。在下列情况下,original将是未被触及的值,而value是您正在处理的值。进一步的操作应与value一起使用并保留original

a.map(function(num) {
  return {
    original: num,
    value: //stuff
  };
});

答案 1 :(得分:1)

虽然约瑟夫梦想家的另一个解决方案指向了正确的方向,但缺乏问题的具体通缉结果。

此提案使用包含对象的数组,并保留以前的排序顺序pos和所需的联合号码。

排序后,您可以访问最后一个元素并从新数组中获取原始值。

&#13;
&#13;
var a = ["11", "22", "46", "22", "11", "55"],
    b = a.map(function (aa, i) {
        return {
            value: aa,
            pos: i,
            number: aa.split('').map(Number).reduce(function (a, b) { return a + b }, 0),
        };
    });

b.sort(function (a, b) {
    return a.number - b.number;
});

document.write(b[b.length - 1].value);
document.write('<pre>' + JSON.stringify(b, 0, 4) + '</pre>');
&#13;
&#13;
&#13;

&#13;
&#13;
function myfun(a) {
    var b = a.map(function (aa, i) {
            return {
                value: aa,
                pos: i,
                number: aa.replace(/-/g, '').split('').map(Number).reduce(function (a, b) { return a + b }, 0),
            };
        });

    b.sort(function (a, b) {
        return a.number - b.number;
    });
    return b;
}

document.write('<pre>' + JSON.stringify(myfun(['1-2-3-4', '5-67-7-8', '2-3545-4-6-8-1', '3-3-4-1-3-4', "3-2-4-5-7", '2-3-4-5-7']), 0, 4) + '</pre>');
&#13;
&#13;
&#13;