如何将JS哈希表转换为具有特定顺序的数组?

时间:2014-07-07 11:57:26

标签: javascript underscore.js

我有:

var productsSelected = {
  mouse: "Logitech 232",
  display: "27-inch LCD",
  memory: "8GB",
  videoCard: "nVidia 6500-GTS",
  extendedWarranty: "",
  extraBattery: "",
  antivirus: "",
  cpu: "Core i7 2.4GHz"
}

我想将其转换为具有特定顺序的数组:

var productsSelectedArray = [
  {cpu: "Core i7 2.4GHz"},
  {memory: "8GB"},
  {videoCard: "nVidia 6500-GTS"},
  {display: "27-inch LCD"},
  {extraBattery: ""},
  {antivirus: ""},
  {mouse: "Logitech 232"},
  {extendedWarranty: ""}
]

我可以给这个函数一个定义我想要的顺序的数组:

var desiredOrder = [
  "cpu",
  "memory",
  "videoCard",
  "display",
  "extraBattery",
  "antivirus",
  "mouse",
  "extendedWarranty"
]

但是我很难搞清楚如何编写这个功能。我也安装了UnderscoreJS。

我认为我会从一个以desiredOrder数组和productsSelected哈希为参数的函数开始,它会将productsSelectedArray声明为空数组。

var convertHashToArray = function(hashTable, desiredOrderArray){
   ...
}

它将遍历desiredOrder,并且对于每个值,它将在productsSelected哈希中查找该值。然后它会将带有键desiredOrder[i]和值result of lookup in productsSelected的哈希值推送到数组,对吗?

修改

谢谢大家的所有答案!我很高兴我问过......我不相信我会提出这么短的解决方案。

4 个答案:

答案 0 :(得分:1)

  

它将循环遍历desiredOrder,对于每个值,它将在productsSelected哈希中查找该值。然后它将使用关键的desiredOrder [i]推送一个哈希值,并在productsSelected中将查找值结果给数组,对吗?

是的,那就是如何做到的。用下划线:

function convertHashToArray(hashTable, desiredOrderArray){
     return _.map(desiredOrderArray, function(key) {
         return _.object([[key, hashTable[key]]]);
     });
}

答案 1 :(得分:0)

function convertHashToArray(productsSelected, desiredOrder) {
    var productsSelectedArray = [];

    desiredOrder.forEach(function(item){
        var obj = {};
        obj[item] = productsSelected[item];
        productsSelectedArray.push(obj);   
    })
}

答案 2 :(得分:0)

我会这样做:

function toOrderedList(input, order){
    var result = [];
    for(var i=0;i<order.length;i++){
        var item = {};
        item[order[i]] = input[order[i]];
        result.push(item);
    }
    return result;
}

并称之为:

var newArray = toOrderedList(productsSelected,desiredOrder);

实例:http://jsfiddle.net/3jvFq/

答案 3 :(得分:0)

这应该以简单的方式工作

var orderedProducts = desiredOrder.map(function (elem) {
    var obj = {};
    obj[elem] = productsSelected[elem];
    return obj; 
});

我提出了相关的变量。