如何将一个javascript数组映射到另一个javascript数组
我有一个JavaScript中的构造函数,它包含两个属性如何将一个javascript数组映射到另一个javascript数组,javascript,arrays,Javascript,Arrays,我有一个JavaScript中的构造函数,它包含两个属性Key和Values array: function Test(key, values) { this.Key = key; this.Values = values.map(values); } 然后我创建了一个测试对象数组: var testObjectArray = []; testObjectArray.push(new Test(1, ['a1','b1']), new Test(2, ['a1','b2']
Key
和Values array
:
function Test(key, values) {
this.Key = key;
this.Values = values.map(values);
}
然后我创建了一个测试对象数组
:
var testObjectArray = [];
testObjectArray.push(new Test(1, ['a1','b1']), new Test(2, ['a1','b2']));
现在我想将testObjectArray
映射到单个键值
对数组,该数组类似于:
[
{ "Key" : "1", "Value" : "a1" },
{ "Key" : "1", "Value" : "b1" },
{ "Key" : "2", "Value" : "a2" },
{ "Key" : "2", "Value" : "b2" },
]
如何使用数组的
map
函数来实现这一点?对此,可以使用.reduce()
、.concat()
和.map()
var result = testObjectArray.reduce(function(res, obj) {
return res.concat(obj.Values.map(function(val) {
return {"Key":obj.Key, "Value":val};
}));
}, []);
不确定
值是什么。映射(值)代码>本来应该这样做的
演示:
如果您对不创建不必要的数组非常严格,可以稍微调整一下,使用.push()
而不是.concat()
演示:我确信还有其他方法,但这里有一些简单的Javascript可以满足您的需要:
功能测试(键、值){
这个。键=键;
this.Values=Values;//Values.map(值);
}
函数getCombinedTests(testObjectArray){
var all=[];
对于(var i=0;i
您可以通过为每个循环使用以下命令来实现这一点,其中每个键值对将被推送到一个数组中
var mapped = [];
$.each(testObjectArray, function(key, value) {
for(x in value.Values) {
mapped.push({
Key: value.Key,
Value: x
});
}
});
我猜你误解了地图()。下面是一个非常简单的例子:
a = [1, 2, 3]
b = a.map(function (i) { return i + 1 })
// => [2, 3, 4]
以下是映射的MDN文档:。因此,您应该重新考虑在您的案例中使用map。顺便说一下,您的示例不起作用,因为值不是函数
以下是一个可能的解决方案:
res = [];
a = [['a1','b1'],['a1','b2']];
for (var i = 0; i < a.length; ++i) {
for(var j = 0; j < a[i].length; ++j) {
res.push({"Key": i + 1 , "Value" : a[i][j]});
}
}
res=[];
a=[[a1'、[b1']、[a1'、[b2'];
对于(变量i=0;i
对于.map()
来说,这似乎不是一个好的用例。我猜你的意思是.push
?请添加一些解释
var mapped = [];
$.each(testObjectArray, function(key, value) {
for(x in value.Values) {
mapped.push({
Key: value.Key,
Value: x
});
}
});
a = [1, 2, 3]
b = a.map(function (i) { return i + 1 })
// => [2, 3, 4]
res = [];
a = [['a1','b1'],['a1','b2']];
for (var i = 0; i < a.length; ++i) {
for(var j = 0; j < a[i].length; ++j) {
res.push({"Key": i + 1 , "Value" : a[i][j]});
}
}