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