Javascript 在数组的每n个元素处创建一个对象

Javascript 在数组的每n个元素处创建一个对象,javascript,arrays,Javascript,Arrays,我有一个数组,其中包含未知数量的数据,我希望对其进行规范化。 如何在JavaScript中推送n个元素并在初始数组的第n个元素处创建对象 我得到一个大小为10000的数组 ["name: john", "dob:20/01/99","name: Christine", "dob:40/01/99", "name: Loub", "dob:30/01/99".......] 我想要一个像下面这样的成就 {"name": "john","dob:20/01/99"},{"name":"Christ

我有一个数组,其中包含未知数量的数据,我希望对其进行规范化。 如何在JavaScript中推送n个元素并在初始数组的第n个元素处创建对象

我得到一个大小为10000的数组

["name: john", "dob:20/01/99","name: Christine", "dob:40/01/99", "name: Loub", "dob:30/01/99".......]
我想要一个像下面这样的成就

{"name": "john","dob:20/01/99"},{"name":"Christine","dob:40/01/99"}.........
我试过的

for (var i = 0; i < arry.length; i++){

    var entry = arry[i];

    if(i % 2){ 
        var x = {}
        x.push(entry)
    }
}
for(变量i=0;i
使用这样的结构可能会更好:

[
    {
        name: "john",
        dob: "1/1/2020"
    },
    {
        name: "jane",
        dob: "1/3/2020"
    },
    etc.
]
let arr=[“姓名:约翰”、“出生日期:20/01/99”、“姓名:克里斯蒂娜”、“出生日期:40/01/99”、“姓名:卢布”、“出生日期:30/01/99”]
让res=arr.reduce((acc、cur、idx、arrC)=>{
如果(idx%2==0){
让name=cur.split(“:”[1]。trim()
设dob=arrC[idx+1]。拆分(“:”[1]。修剪()
acc.push({name:name,dob:dob})
}
返回acc
},[])

console.log(res)
输入似乎是一个字符串数组,其形式如下:

"<key>:<value>"
因为您希望每对索引都是一个新对象。在每次迭代中,您还需要
输入[i+1]
。但您也可以简单地将
i
增加2 以下是固定代码:

var arry = ["name: john", "dob:20/01/99","name: Christine", "dob:40/01/99", "name: Loub", "dob:30/01/99"];

var objs = [];
for (var i = 0; i < arry.length; i += 2){
  var v1 = arry[i].split(':').map(s => s.trim());
  var v2 = arry[i + 1].split(':').map(s => s.trim());
  var obj = {};
  obj[v1[0]] = v1[1];
  obj[v2[0]] = v2[1];
  objs.push(obj);
}

console.log(objs);
var arry=[“姓名:约翰”,“出生日期:1999年1月20日”,“姓名:克里斯蒂娜”,“出生日期:1999年1月40日”,“姓名:卢布”,“出生日期:1999年1月30日”];
var objs=[];
对于(变量i=0;is.trim());
var v2=arry[i+1].split(“:”).map(s=>s.trim());
var obj={};
obj[v1[0]]=v1[1];
obj[v2[0]]=v2[1];
推进(obj);
}
console.log(objs);
用于创建长度为原始长度一半的新数组。在iteratee函数中,将两个项切分,并将它们映射到entries表单([[key,value],[key,value]]),然后将转换为具有以下内容的对象:

const arr=[“姓名:约翰”,“出生日期:1999年1月20日”,“姓名:克里斯蒂娜”,“出生日期:1999年1月40日”,“出生日期:1999年1月30日”,“出生日期:1999年1月30日”]
const result=Array.from({length:arr.length/2},({,i)=>//创建一个大小为原始数组一半的新数组
fromEntries(//将条目转换为对象
arr.slice(i,i+2)//从原始数组中获取两项
.map(str=>str.split(/:\s*/)//将它们映射到[key,value]项
)
)

console.log(result)
所需结果的语法无效。可能您的意思是
[{“name”:“john”,“dob”:“20/01/99”},…]
在所需结果中?原始数据是字符串数组…您尝试的代码得到了什么输出?您的代码当前失败,因为它正在对象(
x
)上调用
push
。如果要将
x
添加到数组中,可能需要将其加入。
var arry = ["name: john", "dob:20/01/99","name: Christine", "dob:40/01/99", "name: Loub", "dob:30/01/99"];

var objs = [];
for (var i = 0; i < arry.length; i += 2){
  var v1 = arry[i].split(':').map(s => s.trim());
  var v2 = arry[i + 1].split(':').map(s => s.trim());
  var obj = {};
  obj[v1[0]] = v1[1];
  obj[v2[0]] = v2[1];
  objs.push(obj);
}

console.log(objs);