簡體   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