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"
。我有办法做到这一点吗?
答案 0 :(得分:2)
在a.map
上,让它返回一个对象,该对象包含一个包含原始值的属性,以及一个您想要修改的属性。在下列情况下,original
将是未被触及的值,而value
是您正在处理的值。进一步的操作应与value
一起使用并保留original
。
a.map(function(num) {
return {
original: num,
value: //stuff
};
});
答案 1 :(得分:1)
虽然约瑟夫梦想家的另一个解决方案指向了正确的方向,但缺乏问题的具体通缉结果。
此提案使用包含对象的数组,并保留以前的排序顺序pos
和所需的联合号码。
排序后,您可以访问最后一个元素并从新数组中获取原始值。
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;
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;