JS通过字符串访问孙子属性

时间:2020-05-15 17:09:10

标签: javascript arrays sorting

在以下情况下,我将如何访问对象的孙属性?

我正在尝试创建一个接受条件并按该条件进行排序的排序功能

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")

2 个答案:

答案 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>