我現在被困了一整天,不能再進一步了。我知道,我錯過了一件小事,但就是找不到。
我有兩個陣列:
arrKeys = ["a", "b", "c"]
arrValues = [ 1, 2, 3, 4, 5, 6, 7, 8, 9]
我想得到一個物件陣列,看起來像:
myObj = [
{
"a": 1,
"b": 2,
"c": 3
},
{
"a": 4,
"b": 5,
"c": 6
},
{
"a": 7,
"b": 8,
"c": 9
}
]
我試圖做類似的事情:
const myObj = arrKeys.reduce((newObj, key, index) => {
if (arrValues[index] == undefined) arrValues[index] = null
newObj[key] = aarValues[index]
return newObj
}, {})
cosnole.log(myObj)
但問題是,arrKeys它只回圈一次,我不知道如何“重置”計數器每次arrKeys達到最大長度。我也只得到了一個物件,而不是一個物件陣列:
我的結果
myObj = {
"a": 1,
"b": 2,
"c": 3
}
任何想法都真的很受歡迎。
uj5u.com熱心網友回復:
您可以使用模運算子來檢查每個keys.length第 n 個元素,然后通過切片開始是當前索引和結束當前索引 keys.length 的值陣列來添加一個新物件
const f = (keys, values) => values.reduce((r, e, i) => {
if (i % keys.length === 0) {
const index = i / keys.length
r[index] = values.slice(i, i keys.length).reduce((r, e, i) => {
r[keys[i]] = e
return r
}, {})
}
return r
}, [])
console.log(f(["a", "b", "c"], [1, 2, 3, 4, 5, 6, 7, 8, 9]))
console.log(f(["a", "b", "c", 'g'], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))
console.log(f(["a", "b"], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]))
uj5u.com熱心網友回復:
您可以迭代這些值,arrKeys.length一次創建塊,然后通過將塊索引映射到適當的鍵來從塊創建物件。這種方法的優點是,如果arrValues不是arrKeys長度的精確倍數,它仍然可以作業:
const f = (arrKeys, arrValues) => {
const result = []
const kLen = arrKeys.length
const vLen = arrValues.length
for (i = 0; i < vLen; i = kLen) {
chunk = arrValues.slice(i, i kLen)
result.push(Object.fromEntries(chunk.map((v, i) => [arrKeys[i], v])))
}
return result;
}
console.log(f(["a", "b", "c"], [1, 2, 3, 4, 5, 6, 7, 8, 9]))
console.log(f(["a", "b", "c"], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]))
console.log(f(["a", "b", "c", "d"], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]))
uj5u.com熱心網友回復:
一種方法是回圈arrValues使用傳統的for...loop.
我們可以使用模運算子%來確定我們在三個運行中的位置。
檢查下面的演示:
var arrKeys = ["a", "b", "c"];
var arrValues = [ 1, 2, 3, 4, 5, 6, 7, 8, 9];
var myObj = [];
var newObj = null;
for(var i=0; i<arrValues.length; i )
{
if(i % 3 === 0) // First run of three
newObj = {};
newObj[ arrKeys[i % 3] ] = arrValues[i];
if(i % 3 === 2) // We're at the end of the run of three
myObj.push(newObj);
}
console.log(myObj);
uj5u.com熱心網友回復:
我這樣做reduce
const arrKeys = ["a", "b", "c"]
const arrValues = [ 1, 2, 3, 4, 5, 6, 7, 8, 9]
let myObj = [];
arrValues.reduce((pre, cur,i) => {
pre[arrKeys[i % 3]] = cur;
if (i % 3 === 2) {
myObj.push(pre);
return {};
} else return pre;
}, {})
console.log(myObj)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/490167.html
標籤:javascript 数组 目的
上一篇:OracleCASE陳述句
