2017-10-05 48 views
0

我有這樣如何根據嵌套的屬性值n個數據進行排序的JavaScript

[{key:'A',map:[{ 
volume:2000, 
year:2017 
},{ 
volume:2000, 
year:2018 
}] 
}, 
{key:'B',map:[{ 
volume:2000, 
year:2017 
},{ 
volume:1000, 
year:2018 
}] 
}, 
{key:'C',map:[{ 
volume:2000, 
year:2017 
},{ 
volume:3000, 
year:2018 
}] 
} 
] 

陣列現在我有一個基於體積或特定年份即上,如果我做的2018年量排序排序是我的結果應該是這樣的

[{key:'C',map:[{ 
volume:2000, 
year:2017 
},{ 
volume:3000, 
year:2018 
}] 
}, 
{key:'A',map:[{ 
volume:2000, 
year:2017 
},{ 
volume:2000, 
year:2018 
}] 
}, 
{key:'B',map:[{ 
volume:2000, 
year:2017 
},{ 
volume:1000, 
year:2018 
}] 
} 
] 

我試圖用java腳本正常排序,但它並沒有幫助,請人讓我知道該怎麼做?

編輯1:這裏 是我的排序功能

sortedData = currentYearData.sort(
      function(a,b){ 
      let aData = a.map(data => data.map).filter(data => data.year === 2018); 
      let bData = b.map(data => data.map).filter(data => data.year === 2018); 
      if(aData.volume < bData.volume) 
       return 1; 
      if(bData.volume < aData.volume) 
       return -1; 
      else 
       return 0 
      } 
     ); 
+0

你究竟做了什麼?請參閱'compareFunction'在這裏:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort – Walk

+0

我已經刪除了該函數已寫入導致我的問題 – LowCool

+0

分享你的'即使它不起作用,我也嘗試過。 – Walk

回答

1

你可以與指定年份的價值SEACH過濾,然後降序排序。

var data = [{ key: 'A', map: [{ volume: 2000, year: 2017 }, { volume: 2000, year: 2018 }] }, { key: 'B', map: [{ volume: 2000, year: 2017 }, { volume: 1000, year: 2018 }] }, { key: 'C', map: [{ volume: 2000, year: 2017 }, { volume: 3000, year: 2018 }] }]; 
 

 
data.sort(function (a, b) { 
 
    function getValue(array) { 
 
     var value; 
 
     array.some(function (a) { 
 
      if (a.year === 2018) { 
 
       value = a.volume; 
 
       return true; 
 
      } 
 
     }); 
 
     return value; 
 
    } 
 
    return getValue(b.map) - getValue(a.map); 
 
}); 
 

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

ES6

var data = [{ key: 'A', map: [{ volume: 2000, year: 2017 }, { volume: 2000, year: 2018 }] }, { key: 'B', map: [{ volume: 2000, year: 2017 }, { volume: 1000, year: 2018 }] }, { key: 'C', map: [{ volume: 2000, year: 2017 }, { volume: 3000, year: 2018 }] }], 
 
    fn = o => o.year === 2018; 
 

 
data.sort((a, b) => b.map.find(fn).volume - a.map.find(fn).volume); 
 

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

0

這就是:

var ar = [{ 
 
    key: 'A', 
 
    map: [{ 
 
     volume: 2000, 
 
     year: 2017 
 
    }, { 
 
     volume: 2000, 
 
     year: 2018 
 
    }] 
 
    }, 
 
    { 
 
    key: 'B', 
 
    map: [{ 
 
     volume: 2000, 
 
     year: 2017 
 
    }, { 
 
     volume: 1000, 
 
     year: 2018 
 
    }] 
 
    }, 
 
    { 
 
    key: 'C', 
 
    map: [{ 
 
     volume: 2000, 
 
     year: 2017 
 
    }, { 
 
     volume: 3000, 
 
     year: 2018 
 
    }] 
 
    } 
 
]; 
 

 
function compare2018Only(a, b) { 
 
    valA = a.map.filter(obj => obj.year == 2018)[0]; 
 
    valB = b.map.filter(obj => obj.year == 2018)[0]; 
 
    return valB.volume - valA.volume; 
 
} 
 

 
var result = ar.sort(compare2018Only); 
 
console.log(result);

相關問題