如何将一个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']

我有一个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']));
现在我想将
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]});
  }
}