Tho*_*ore 9 javascript arrays sorting object ecmascript-6
我正在尝试对嵌套对象数组进行排序.它使用静态选择键,但我无法弄清楚如何动态获取它.
到目前为止,我已经有了这段代码
sortBy = (isReverse=false) => {
this.setState(prevState => ({
files: prevState.files.sort((a, b) => {
const valueA = (((a || {})['general'] || {})['fileID']) || '';
const valueB = (((b || {})['general'] || {})['fileID']) || '';
if(isReverse) return valueB.localeCompare(valueA);
return valueA.localeCompare(valueB);
})
}));
}
Run Code Online (Sandbox Code Playgroud)
此时键是硬编码的,['general']['orderID']但我想通过向函数添加一个keys参数来使这部分变为动态sortBy:
sortBy = (keys, isReverse=false) => { ...
Run Code Online (Sandbox Code Playgroud)
keys是一个嵌套键的数组.对于上面的例子,它将是['general', 'fileID'].
为实现这一目标需要采取哪些步骤?
注意:子对象可能是未定义的,因此我正在使用 a || {}
注2:我正在使用es6.没有外部包.
一种方法是在新参数上使用reduce()keys,如下所示:
sortBy = (keys, isReverse=false) =>
{
this.setState(prevState =>
({
files: prevState.files.slice().sort((a, b) =>
{
const valueA = (keys.reduce((acc, key) => (acc || {})[key], a) || '').toString();
const valueB = (keys.reduce((acc, key) => (acc || {})[key], b) || '').toString();
return (isReverse ? valueB.localeCompare(valueA) : valueA.localeCompare(valueB));
})
}));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
429 次 |
| 最近记录: |