2016-04-22 53 views
2
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"。有没有办法让我这样做?修改后的原始数组值

+1

大概只与'objects',使用的'数组{值: '',起源: '',...}'或类似的东西? – somethinghere

回答

1

虽然Joseph the Dreamer的另一个解决方案指向了正确的方向,但缺乏具体的问题结果。

该提议使用一个包含对象的数组,并保留前一个排序顺序为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>');

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

+1

它完美的作品。谢谢。 –

+0

如果我的数字之间有像“1-1”和“2-2”这样的“ - ”字符,那么我该如何添加新的变量,如.toString()。replace(/ -/g,“”);然后再用.split(','); var b = a.toString()。replace(/ -/g,“”); \t // \t var c = b.split(',');但最后我的原始值显示没有任何“ - ”,所以它显示我22而不是2-2。 –

+0

使用'split(' - ')'而不需要替换。 –

2

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

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

对不起约瑟夫我想写代码,但我没有任何运气。所以这是我的代码,我已经改变了吗?我只是想,如何不返回任何错误。 a.map(函数(NUM){ 返回num.split( '') .MAP(数字) 。降低(功能(A,B){ 返回A + B; }); }); –