2017-11-22 5 views
0

を受け取った人で終わり、 最高給与を受け取り、 で終わる給与でネストされた配列をソートするとします。私はあなたがPHPを掲示ように見え事前番号でJSのネストされた配列をソートする方法は?

Array 
(
[0]=>Array 
(
[firstName]=>John 
[lastName]=>Doe 
[age]=>35 
[salary]=>Array 
(
[gbp]=>"180" 
[eur]=>“” 
[usd]=>"" 
) 
) 
[1]=>Array 
(
[firstName]=>Maria 
[lastName]=>Anders 
[age]=>26 
[salary]=>Array 
(
[gbp]=>"" 
[eur]=>"100" 
[usd]=>"" 
) 
) 
[2]=>Array 
(
[firstName]=>Thomas 
[lastName]=>Hardy 
[age]=>31 
[salary]=>Array 
(
[gbp]=>"" 
[eur]=>"" 
[usd]=>"224" 
) 
) 
) 
+3

、何かを試してみて、あなたがしようとした後に戻って来てください。私たちがあなたを助けることができるように、ここで試したことを書きなさい。これは「宿題をする」ウェブサイトではありません。 –

+2

少なくとも、フォーマットされた方法でデータを提供します。 –

答えて

1

でtはそれを行う方法を知っているt want to take into consideration the currency... I don ... 感謝を着用します。とにかく

sort機能を見てみましょう:

var numbers = [{ 
 
    age: 10, 
 
    salary: { 
 
    gbp: 10, 
 
    eur: 0, 
 
    usd: 0 
 
    } 
 
}, { 
 
    age: 2, 
 
    salary: { 
 
    gbp: 0, 
 
    eur: 345, 
 
    usd: 0 
 
    } 
 
}, { 
 
    age: 100, 
 
    salary: { 
 
    gbp: 0, 
 
    eur: 0, 
 
    usd: 23 
 
    } 
 
}, { 
 
    age: 50, 
 
    salary: { 
 
    gbp: 0, 
 
    eur: 432, 
 
    usd: 0 
 
    } 
 
}]; 
 

 
numbers.sort(function(a, b) { 
 
    // Get the sum of salaries in the a object 
 
    let aAmt = Object.values(a.salary).reduce((s, v) => s + v, 0) 
 
    // Get the sum of salaries in the b object 
 
    let bAmt = Object.values(b.salary).reduce((s, v) => s + v, 0) 
 
    // Calculate the difference 
 
    return bAmt - aAmt 
 
}) 
 

 
console.log(numbers);

1

私は何を掲載するJSあるとは思わないが、あなたはJSあなたの配列の類似したタイプを持っている場合配列は、この

var x = [['John', 'Doe', 35, [180,0,0]],['Maria','Anders',26,[0,100,0]],['Thomas','Hardy',31,[0,0,224]]] 
のようになりますと仮定すると、以下の

を使用することを試みることができます

x.sort(sorty) 

はあなたにこれを与える:

あなたはその後、その後、これを実行しているこの

function sorty(a,b){ 
    if(Math.max.apply(null, a[3]) > Math.max.apply(null, b[3])) return -1; 
    if(Math.max.apply(null, a[3]) < Math.max.apply(null, b[3])) return 1; 
    return 0 
} 

使用することができ、私は推測するハックソリューションの

0: (4) ["Thomas", "Hardy", 31, Array(3)] 
    1: (4) ["John", "Doe", 35, Array(3)] 
    2: (4) ["Maria", "Anders", 26, Array(3)] 

ソート。

0

salaryオブジェクトには関連する値が1つのみですが、並べ替えに値を取得するにはlogical OR ||を使用できます。値がtruthyでなければ、ゼロがとられる。

Array#sortのコールバックでは、a - bの2つの値のデルタをとり、bの前に小さいaをソートします。降順でソートする場合は、オペランドをb - aに逆順に並べ替えてください。

var array = [{ firstName: "John", lastName: "Doe", age: 35, salary: { gbp: "180", eur: "", usd: "" } }, { firstName: "Maria", lastName: "Anders", age: 26, salary: { gbp: "", eur: "100", usd: "" } }, { firstName: "Thomas", lastName: "Hardy", age: 31, salary: { gbp: "", eur: "", usd: "224" } }]; 
 

 
array.sort(function (a, b) { 
 
    var aa = a.salary.gbp || a.salary.eur || a.salary.usd || 0, 
 
     bb = b.salary.gbp || b.salary.eur || b.salary.usd || 0; 
 

 
    return bb - aa; 
 
}); 
 

 
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

関連する問題