如何通过在Javascript中使用两个普通数组来创建具有相同键的关联数组
我读过无数关于stackoverflow的帖子,但我无法解决我的问题 我有两个阵列:如何通过在Javascript中使用两个普通数组来创建具有相同键的关联数组,javascript,arrays,Javascript,Arrays,我读过无数关于stackoverflow的帖子,但我无法解决我的问题 我有两个阵列: arr_name = ["alice", "igor", "prince"] arr_slug = ["link_1", "link_2", "link_3"] 我希望结果是: var data = { "tag_info": [ "name":"alice", "slug":"link_1" ], "tag_
arr_name = ["alice", "igor", "prince"]
arr_slug = ["link_1", "link_2", "link_3"]
我希望结果是:
var data = {
"tag_info": [
"name":"alice",
"slug":"link_1"
],
"tag_info": [
"name":"igor",
"slug":"link_2"
],
"tag_info": [
"name":"prince",
"slug":"link_3"
],
};
我插入了我的代码片段,因为我不应该这样做
把它放在前面。
这就是我想做的:
arr_name = ["alice", "igor", "prince"]
arr_slug = ["link_1", "link_2", "link_3"]
new_name = []
new_slug = []
arr_name.forEach(function(property) {
new_name.push({"name":property});
});
arr_slug.forEach(function(property2) {
new_slug.push({"slug":property2});
});
var data = {'tags_info':{new_name,new_slug}};
我得到的结果如下:
"tag_info" : {
"new_name" : [{
"name":"alice",
"name":"igor",
"name":"prince"
]},
"new_slug" : {[
"slug":"link_1"
"slug":"link_2"
"slug":"link_3"
]}
}
我无法建立正确的循环
我该怎么做呢?嗯,这引入了一些一致性问题,因为您没有任何类型的键来关联值,但是如果您100%确定始终有两个长度相同的数组,并且一个数组的每个位置都与另一个数组的某个位置相关,那么您可以使用以下方法:
let arr_name = ["alice", "igor", "prince"]
let arr_slug = ["link_1", "link_2", "link_3"]
let result = arr_name.reduce((data, name, index) => {
data.push( {
'tag_info': {
name: name,
slug: arr_slug[index]
}
})
return data;
}, []);
请记住,这不会产生您显示的结构,因为这是不可能的,正如@Nick Parsons所说的,因为它是无效的JSON,这引入了一些一致性问题,因为您没有任何类型的键来关联值,但是,如果您100%确定始终有两个长度相同的数组,并且其中一个数组的每个位置都与另一个数组的某个位置相关,则可以使用以下方法:
let arr_name = ["alice", "igor", "prince"]
let arr_slug = ["link_1", "link_2", "link_3"]
let result = arr_name.reduce((data, name, index) => {
data.push( {
'tag_info': {
name: name,
slug: arr_slug[index]
}
})
return data;
}, []);
请记住,这不会产生您显示的结构,因为正如@Nick Parsons所述,这是不可能的,因为它是无效的JSON对象不能有多个同名键。它们必须是独一无二的 相反,您可以拥有一个对象数组 假设两个数组的长度相同,并且它们对应的元素始终位于同一索引中,则可以执行以下操作:
让arr_name=[“alice”,“bob”];
让arr_slug=[“link_1”,“link_2”];
让数据=arr_name.map((名称,索引)=>({
名称
段塞:arr_段塞[索引],
}));
数据的值为:
[
{name:“alice”,slug:“link_1”},
{name:“bob”,slug:“link_2”}
]
对象不能有多个同名键。它们必须是独一无二的
相反,您可以拥有一个对象数组
假设两个数组的长度相同,并且它们对应的元素始终位于同一索引中,则可以执行以下操作:
让arr_name=[“alice”,“bob”];
让arr_slug=[“link_1”,“link_2”];
让数据=arr_name.map((名称,索引)=>({
名称
段塞:arr_段塞[索引],
}));
数据的值为:
[
{name:“alice”,slug:“link_1”},
{name:“bob”,slug:“link_2”}
]
无法获得所需的输出。对象需要唯一的键,数组中不能有键值对。在JavaScript中,您必须尝试一些东西……您需要首先定义一个有意义的结果。正如@NickParsons所描述的,您当前的期望本身就是一个语法错误。您想要的输出是不可能的。对象需要唯一的键,数组中不能有键值对。在JavaScript中,您必须尝试一些东西……您需要首先定义一个有意义的结果。正如@NickParsons所描述的,您当前的期望本身就是一个语法错误。为什么不返回数据。concat({})
concat返回一个新数组,其中包含连接数组的所有元素。在本例中,输出是一个数组,其中包含一个单独的对象,每个对象有两个属性,name和slugI插入了一个我试图执行的示例,显然这是错误的。这就是我想要实现的,谢谢!为什么不returndata.concat({})
concat返回一个新数组,其中包含连接数组的所有元素。在本例中,输出是一个数组,其中包含一个单独的对象,每个对象有两个属性,name和slugI插入了一个我试图执行的示例,显然这是错误的。这就是我想要实现的,谢谢!谢谢你的回复,但我要找的和@Jorge Solis did一模一样谢谢你的回复,但我要找的和@Jorge Solis一模一样