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
散列中查找该值。然后,它会将一个带有keydesiredOrder[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;
});