修改后的原始数组值

Original Array value after modification

本文关键字:数组 原始 修改      更新时间:2023-09-26
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".我有办法做到这一点吗?

a.map上,使其返回一个对象,其中包含包含原始值的属性和要修改的属性。在以下情况下,original将是要保持不变的值,而value是您将要处理的值。进一步的操作应与value一起使用并保留original

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

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

此提案使用带有对象的数组,并保留以前的排序顺序,其中包含pos和想要的cobined数字。

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

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>');

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>');