繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM