Javascript JS按字符串访问孙子属性

Javascript JS按字符串访问孙子属性,javascript,arrays,sorting,Javascript,Arrays,Sorting,在下面的场景中,如何访问对象的孙子属性 我试图创建一个排序函数,它接受一个条件,并根据该条件进行排序 const数据=[ { a:{ b:{ c:2 } } }, { a:{ b:{ c:1 } } } sortBy(数组、条件){ array.sort((a,b)=>{ 如果(a[标准]>b[标准])返回1; ... } } 我知道这不太管用,但一般的想法是调用sortyBy(data,“a.b.c”)也许您可以将标准作为这样的数组 const data = [{ a: {

在下面的场景中,如何访问对象的孙子属性

我试图创建一个排序函数,它接受一个条件,并根据该条件进行排序

const数据=[
{
a:{
b:{
c:2
}
}
},
{
a:{
b:{
c:1
}
}
}
sortBy(数组、条件){
array.sort((a,b)=>{
如果(a[标准]>b[标准])返回1;
...
}
}

我知道这不太管用,但一般的想法是调用
sortyBy(data,“a.b.c”)

也许您可以将标准作为这样的数组

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

也许您可以将条件作为这样的数组

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

如果您可以使用lodash,那么函数
可以满足您的需要。lodash是一个经过测试的库,因此您无需重新设计该逻辑

let data=[{a:{b:{c:2}},{a:{b:{c:1}}}],
排序=uu.sortBy(数据,“a.b.c”);
console.log(已排序);

如果您可以使用lodash,那么函数
\uUtby
可以满足您的需要。lodash是一个经过测试的库,因此您无需重新设计该逻辑

let data=[{a:{b:{c:2}},{a:{b:{c:1}}}],
排序=uu.sortBy(数据,“a.b.c”);
console.log(已排序);

你必须拆分标准,然后递归/迭代地深入到它所指的级别这是我的第一个想法,希望有一种更简单的方法,递归总是让我陷入循环……哈尔哈……特别是在这种情况下,不必是递归,可以只是一个循环,但你必须自己编写它。使用json访问字符串路径没有内置的方式afaik(因为缺少更好的术语)要在本地访问嵌套元素,您必须拆分条件,并递归/迭代地深入到它所指的级别这是我的第一个想法,希望有一种更简单的方法,递归总是让我陷入一个循环…哈尔哈…特别是在这种情况下,不必是递归,可以只是一个循环,但您必须没有一种内置的方法可以使用json访问字符串路径(因为没有更好的术语)来访问嵌套元素。在这种情况下,只需使用
sortBy(data'a.b.c'.split('))创建该数组即可
?@gman,这对我来说是有意义的,似乎比仅仅和数组更明确一些。在这种情况下,只需用
排序(数据'a.b.c'。split('))
?@gman,对我来说是有意义的,似乎比仅仅和数组更明确一些