对对象数组进行排序,并从对象返回特定值的数组

时间:2018-06-25 06:53:40

标签: javascript arrays

我有一个对象数组(产品列表),并且正在对其执行排序逻辑。为了使它成为事实的唯一来源,我制作了一个id产品图,看起来像这样:

const prodsMap = {
  1 : {
    id : 1,
    name : 'abc',
    price : 4
  },
  2 : {
    id : 2,
    name : 'aac',
    price : 3
  }
}

现在为了对产品进行分类,我正在这样做:

function sortString(data, propName) {
  return data.sort((obj1, obj2) => {
    const val1 = obj1[propName]
    const val2 = obj2[propName]

    if (val1 < val2) {
      return -1
    }

    if (val1 > val2) {
      return 1
    }

    return 0
  })
}

像这样调用函数:

const prods = sortString(Object.values(prodsMap), 'name')

这里一切都很好,排序的结果将是一个对象数组,以便获得我正在使用map函数的id。

现在的问题是,我必须迭代三次(第一次获取对象值,第二次进行排序,第三次来映射ID),我想知道是否有更好的方法在对数组进行排序时仅获取ID

1 个答案:

答案 0 :(得分:3)

您可以对移交对象的键进行排序,以获得id的数组。

如果需要对象的ìd属性,则可以使用id属性映射外部对象的值。

const prodsMap = {
  1 : {
    id : 1,
    name : 'abc',
    price : 4
  },
  2 : {
    id : 2,
    name : 'aac',
    price : 3
  }
}

function sortString(data, propName) {
  return Object.keys(data).sort((a, b) => {
    const val1 = data[a][propName];
    const val2 = data[b][propName];

    if (val1 < val2) {
      return -1;
    }

    if (val1 > val2) {
      return 1;
    }

    return 0;
  });
}

const prods = sortString(prodsMap, 'name');

console.log(prods);