2016-04-22 86 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; }); }); –