![](/img/trans.png)
[英]Javascript reformat or map an array of objects to a new array of new objects? like reformating it and giving new keys (names) for values
[英]New array of objects, but with changed keys
我有一個問題,就是用對象數組選擇一些數據並將它推入新對象(在不同的數組中),但方式不同。
const fruits = [
{name: "apple"},
{name: "kiwi"},
{name: "banana"},
{name: "orange"},
{name: "pineapple"},
{name: "coconut"},
{name: "peach"},
{name: "lemon"}
]
我想從中選擇一些項目並將它們粘貼到全新的數組中,所以它看起來像這樣:
const manyFruits = [
{name: "apple-banana-kiwi-coconut"},
{name: "orange-pineapple-peach-lemon"}]
做一個函數可以很好地解決我們想要選擇多少個水果進入新數組並且它們不應該重復的功能。
以下是我的代碼。 首先,我創建帶有名稱的新數組,然后我將它們推入新數組,這取決於“長度”,最后我嘗試用對象創建新數組,但它失敗了。
const fruitArray = length => {
const fruits = [
{name: "apple"},
{name: "kiwi"},
{name: "banana"},
{name: "orange"},
{name: "pineapple"},
{name: "coconut"},
{name: "peach"},
{name: "lemon"}
]
const allFruits = []
for (let i = 0; i < fruits.length; i++) {
allFruits.push(fruits[i].name)
}
const newFruits =[]
for (let i = 0; i < length; i++) {
newFruits.push(allFruits[i])
}
const manyFruitsInOneArr = []
for (let i = 0; i < 2; i++) {
let newArr = {
name: newFruits.join("-"),
}
manyFruitsInOneArr[i] = (newArr)
}
console.log(manyFruitsInOneArr)
}
fruitArray(2)
它在新數組中生成新對象,但項目始終相同。
您可以使用for
循環和內部map()
方法為此創建函數以獲取名稱數組,並使用join()
從值創建字符串。
const fruits = [{"name":"apple"},{"name":"kiwi"},{"name":"banana"},{"name":"orange"},{"name":"pineapple"},{"name":"coconut"},{"name":"peach"},{"name":"lemon"}] const pick = (arr, n) => { const r = []; for (var i = 0; i < arr.length; i += n) { const name = arr .slice(i, i + n) .map(({name}) => name) .join('-'); r.push({name}) } return r; } const result = pick(fruits, 2) console.log(result)
更新:要獲取每個切片的名稱和能量總和,您可以使用map()
和reduce()
方法。
fruits = [ {name: "apple", energy: 100}, {name: "kiwi", energy: 126}, {name: "banana", energy: 150}, {name: "orange", energy: 118}, {name: "pineapple", energy: 98}, {name: "coconut", energy: 83}, {name: "peach", energy: 65}, {name: "lemon", energy: 36} ] const pick = (arr, n) => { const r = []; for (var i = 0; i < arr.length; i += n) { const slice = arr.slice(i, i+n); const name = slice.map(({name}) => name).join('-') const energy = slice.reduce((r, {energy}) => r + energy, 0); r.push({name, energy}) } return r; } const result = pick(fruits, 2) console.log(result)
這可以使用遞歸來完成:
function subset(arr, n){
if(!(n - 1)) return [arr[0].name];
const result = [];
for(let i = 0; i < arr.length - n; i++){
for(const sub of subset(arr.slice(i + 1), n - 1)){
result.push(arr[i].name + "-" + sub);
}
}
return result;
}
所以你可以這樣做:
subset(fruits, 5);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.