2016-04-22 11 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私は配列の最後に2つの10を受け取ります。 d[4]が元々a[2]となり、d[5]a[5]であるとします。どのようにしてコードが私の最初の配列から10の元の値を教えてくれますか? 2, 2, 4, 4, 10, 10を取得したとします。私はこの最後の10を右側の値から、"55"から来たと教えて欲しい。私にそれをする方法はありますか?変更後の元の配列の値

+1

おそらく唯一 'objects'、' {値: ''、起源: ''、...}のアレイを用いた 'またはそんな感じ? – somethinghere

答えて

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

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()のような新しい変数を追加しました。(/ -/g、 ""); .split( '、')を使ってもう1つ。 var b = a.toString()。replace(/ -/g、 ""); \t // \t var c = b.split( '、');最後に私の元の値は " - "なしで表示されるので、私は2-2の代わりに22を表示しています。 –

+0

'split( ' - ')'を置換せずに使用します。 –

2

a.mapでは、元の値を含むプロパティと変更するプロパティを含むオブジェクトを返します。次のケースでは、originalは変更されない値になり、valueは作業する値になります。それ以上の操作はvalueとし、originalを保存してください。ジョセフ・ドリーマーから、他のソリューションは、右方向を指しながら

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

申し訳ありませんJoseph私はコードを書こうとしていますが、私は運がありません。これは私のコードは私が右に変更する必要がありますか?私はちょうどエラーを返さずにどのように考えています。 a.map(関数(NUM){ 戻りnum.split( '') .MAP(番号) .reduce(関数(B){ 戻りA + B; }); })。 –

関連する問題