第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

Javascript:按包含未定義的數(shù)字屬性對對象數(shù)組進(jìn)行排序

Javascript:按包含未定義的數(shù)字屬性對對象數(shù)組進(jìn)行排序

我可以定義一個(gè)數(shù)字?jǐn)?shù)組并像這樣對它們進(jìn)行排序var array = ['2', undefined, '1'];array.sort((a, b) => a - b);console.log(array);輸出是1, 2, null。我有一個(gè)可以包含數(shù)字屬性的對象數(shù)組,我可以這樣定義。并非所有對象都具有 number 屬性?,F(xiàn)在我想通過 number 屬性對這個(gè)對象數(shù)組進(jìn)行排序。所以我試過這個(gè):var array = [  { number: 2 },  {},  { number: 1 }];array.sort((a, b) => a.number - b.number);console.log(array);輸出不是我想要的。我明白了2, undefined, 1。如果數(shù)組中的所有對象都定義了 number 屬性,則相同的排序函數(shù)會產(chǎn)生1, 2,這就是我期望的結(jié)果。var array = [  { number: 2 },  { number: 1 }];array.sort((a, b) => a.number - b.number);console.log(array);所以我的問題是,按屬性對對象數(shù)組進(jìn)行排序的最佳方法是什么,其中屬性并不總是被定義。預(yù)期的結(jié)果是對象按屬性(編號)排序,沒有在數(shù)組末尾定義該屬性的對象。到目前為止,我唯一的解決方案是迭代該集合,如果未定義該屬性,則將該屬性設(shè)置為 0 或null. 然后我可以將對象數(shù)組傳遞給 sort 函數(shù),它可以按我的意愿工作。還有比這更好的方法嗎?Jfiddle:https ://jsfiddle.net/t2r6z13e/1/
查看完整描述

3 回答

?
小唯快跑啊

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊

您可以返回number被比較的每個(gè)對象上的屬性是否存在之間的差異,或者返回它們number屬性的差異(如果兩個(gè)對象都具有所述屬性):


var array = [

  { number: 2 },

  {},

  { number: 1 }

];


array.sort((a, b) => {

  const aHas = typeof a.number !== 'undefined';

  const bHas = typeof b.number !== 'undefined';

  return (bHas - aHas) || (aHas === true && a.number - b.number) || 0;

});

console.log(array);


查看完整回答
反對 回復(fù) 2021-06-11
?
慕姐8265434

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊

您可以為具有對象擴(kuò)展的數(shù)組元素提供默認(rèn)值: {default, ...item}


var array = [

  { number: 2 },

  {},

  { number: 1 },

  {},

  { number: 0 },

];


array.sort((a, b) => (

    {number: Number.MAX_VALUE, ...a}.number -

    {number: Number.MAX_VALUE, ...b}.number));


console.log(array);

如果您的目標(biāo)尚不支持對象擴(kuò)展,請將其替換為Object.assign.


查看完整回答
反對 回復(fù) 2021-06-11
?
ABOUTYOU

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

解釋在評論中:


let array = [

  {},

  { number: 2 },

  {},

  { number: 1 }

];


array.sort((a, b) => {

  // two undefined values should be treated as equal ( 0 )

  if( typeof a.number === 'undefined' && typeof b.number === 'undefined' )

    return 0;

  // if a is undefined and b isn't a should have a lower index in the array

  else if( typeof a.number === 'undefined' )

    return 1;

    // if b is undefined and a isn't a should have a higher index in the array

  else if( typeof b.number === 'undefined' )

    return -1;

    // if both numbers are defined compare as normal

  else

    return a.number - b.number;

});


console.log( array );


查看完整回答
反對 回復(fù) 2021-06-11
  • 3 回答
  • 0 關(guān)注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號