Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将JS哈希表转换为具有特定顺序的数组?_Javascript_Underscore.js - Fatal编程技术网

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

Javascript 如何将JS哈希表转换为具有特定顺序的数组?,javascript,underscore.js,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 productsSel

我有:

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"
]
但是我很难弄清楚如何编写这个函数。我也安装了ejs

我想我应该从一个函数开始,该函数将
desiredOrder
数组和
productsSelected
散列作为参数,并将
productsSelectedArray
声明为空数组

var convertHashToArray = function(hashTable, desiredOrderArray){
   ...
}
它将循环遍历
desiredOrder
,并对每个值在
productsSelected
散列中查找该值。然后,它会将一个带有key
desiredOrder[i]
和value
的哈希值(在所选产品中查找的结果)推送到数组中,对吗

编辑

谢谢大家的回答!我很高兴我问了。。。我不相信我会想出这么短的解决办法

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

    desiredOrder.forEach(function(item){
        var obj = {};
        obj[item] = productsSelected[item];
        productsSelectedArray.push(obj);   
    })
}
它将循环遍历desiredOrder,并对每个值在productsSelected哈希中查找该值。然后它会将一个带有键desiredOrder[i]和productsSelected中的查找结果值的哈希推送到数组中,对吗

是的,就是这样做的。加下划线:

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

我会这样做:

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 orderedProducts = desiredOrder.map(function (elem) {
    var obj = {};
    obj[elem] = productsSelected[elem];
    return obj; 
});

我已经给出了有问题的变量。

-1这只提供了一个值数组。OP想要一个(单一属性)对象的数组,所以我想知道,比如,是否有更简单的方法。也许用下划线?我不想把所有这些都编码出来,然后后来发现我可以用一行就完成,哈哈。即使没有下划线中的helper方法(例如,
.map
),仍然只有5行左右的普通javascript(见我的答案),我想你可以使用javascript map来实现这一点。我得到了一些有用的东西,作为回答补充。谢谢。我不可能想出这个特别的下划线解决方案。这只是我能想出的最短的解决方案。
map
相当简单,但我不喜欢
\uuObject
——我希望有更好的方法。也许@Mritunjay使用的本机回调会更好。
var orderedProducts = desiredOrder.map(function (elem) {
    var obj = {};
    obj[elem] = productsSelected[elem];
    return obj; 
});