我有:
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
的哈希值推送到数组,对吗?
修改
谢谢大家的所有答案!我很高兴我问过......我不相信我会提出这么短的解决方案。
答案 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);
答案 3 :(得分:0)
这应该以简单的方式工作
var orderedProducts = desiredOrder.map(function (elem) {
var obj = {};
obj[elem] = productsSelected[elem];
return obj;
});
我提出了相关的变量。