[英]Create an object at every nth Element of Array
我有一个数组,其中的数据数量未知,我想对其进行标准化。 如何在 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)
}
}
使用这样的结构可能会更好:
[
{
name: "john",
dob: "1/1/2020"
},
{
name: "jane",
dob: "1/3/2020"
},
etc.
]
let arr = ["name: john", "dob:20/01/99","name: Christine", "dob:40/01/99", "name: Loub", "dob:30/01/99"] let res = arr.reduce((acc,cur,idx,arrC) => { if(idx % 2 === 0){ let name = cur.split(":")[1].trim() let dob = arrC[idx+1].split(":")[1].trim() acc.push({name: name, dob: dob}) } return acc },[]) console.log(res)
输入似乎是遵循以下形式的字符串数组:
"<key>:<value>"
有时在值前有一个空格。 您所缺少的就是用该分隔符拆分字符串。 你也应该有
if (i % 2 === 0)
因为您希望每个对索引都是一个新对象。 此外,每次迭代都需要entry[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);
使用Array.from()
创建一个长度为原始数组一半的新数组。 在 iteratee 函数中,对两个项进行切片,并将它们映射到条目表单 ([[key, value], [key, value]]),然后使用Object.fromEntries()
将其转换为对象:
const arr = ["name: john", "dob:20/01/99","name: Christine", "dob:40/01/99", "name: Loub", "dob:30/01/99"] const result = Array.from({ length: arr.length / 2}, (_, i) => // create a new array with half the size of the original Object.fromEntries( // convert entries to an object arr.slice(i, i + 2) // take two items from the original array .map(str => str.split(/:\\s*/)) // map them to [key, value] entries ) ) console.log(result)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.