在以下情况下,我将如何访问对象的孙属性?
我正在尝试创建一个接受条件并按该条件进行排序的排序功能
const data = [
{
a: {
b: {
c: 2
}
}
},
{
a: {
b: {
c: 1
}
}
}
sortBy(array, criteria){
array.sort((a,b) => {
if (a[criteria] > b[criteria]) return 1;
...
}
}
我意识到这不太可行,但是通常的想法是打电话给sortyBy(data, "a.b.c")
。
答案 0 :(得分:2)
也许您可以将条件作为这样的数组。
const data = [{
a: {
b: {
c: 2
}
}
},
{
a: {
b: {
c: 1
}
}
}
]
const sortBy = (array, criteria) => {
getVal = (val) => {
return criteria.reduce((a, c) => {
return a[c];
}, val);
};
array.sort((x, y) => {
return getVal(x) > getVal(y) ? 1 : -1
});
};
sortBy(data, ["a", "b", "c"]);
console.log(JSON.stringify(data, null, 2))
答案 1 :(得分:0)
如果可以使用lodash,则功能_.sortBy
将满足您的需求。 lodash是一个经过充分测试的库,因此您无需重新发明该逻辑。
let data = [{ a: { b: { c: 2 } }},{ a: { b: { c: 1 } }}],
sorted = _.sortBy(data, "a.b.c");
console.log(sorted);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>