【问题标题】:How to sort Javascript arrays in a dictionary如何对字典中的 Javascript 数组进行排序
【发布时间】:2020-04-13 08:24:42
【问题描述】:

如果我有一个数组字典,例如:

samples = {
   "labels": ["A", "B", "C"],
   "values": [2, 3, 1]
}

如何按值顺序对列表进行排序?例如,输出将是:

samples = {
   "labels": ["C", "A", "B"],
   "values": [1, 2, 3]
}

是否需要将列表字典转换为字典列表,按值排序,然后再转换回来,还是有更直接的方法?

【问题讨论】:

    标签: javascript arrays sorting dictionary


    【解决方案1】:

    您可以获取索引并对它们进行排序,然后使用排序后的索引获取映射数组。

    var samples = { labels: ["A", "B", "C"], values: [2, 3, 1] },
        indices = [...samples.values.keys()];
    
    indices.sort((a, b) => samples.values[a] - samples.values[b]);
    
    samples.labels = indices.map(i => samples.labels[i]);
    samples.values = indices.map(i => samples.values[i]);
    
    console.log(samples);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

    • 这对我有用。谢谢!我还可以通过添加更多地图将其扩展到对字典中的其他列表进行排序。
    【解决方案2】:

    我们可以做到这一切。

    首先我们 map 一个新数组给我们 [{label, value}]
    然后我们sortvalue 最后我们使用reduce 重建我们原来的对象。

    let samples = {
       "labels": ["A", "B", "C"],
       "values": [2, 3, 1]
    }
    
    samples = samples.labels
           .map((label, i) => ({ label, value: samples.values[i] }))
           .sort(({ value: a }, { value: b }) =>  a - b)
           .reduce((a, { value, label }) => {         
              a.labels.push(label);
              a.values.push(value);
              return a;
           }, { labels: [], values: []});
    
    console.log(JSON.stringify(samples));

    【讨论】:

      猜你喜欢
      • 2020-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      相关资源
      最近更新 更多