gpt4 book ai didi

javascript - 如何使用 ES6 在 javascript 中删除或添加项目到锯齿状数组?

转载 作者:行者123 更新时间:2023-12-01 00:48:35 24 4
gpt4 key购买 nike

假设我有以下锯齿状数组

var data = [
['a','b','c'],
['d','e',['f','g']],
['h','i','j']
];

我希望能够删除“f”,以便结果看起来像

var data1 = [
['a','b','c'],
['d','e',['g']],
['h','i','j']
];

同样,我想在上面的数组中的“h”后面添加“f”来给我

var data2 = [
['a','b','c'],
['d','e',['g']],
['h','f','i','j']
];

如何在 javascript 或 ES6 中实现此目的?请注意,我的锯齿状数组可以是多级深度,以上仅作为示例。

所以我需要像这样的功能data.remove('f') 结果为 data1data1.addafter('h','f') 结果为 data2

我尝试了如下的递归函数,但无法破解它......

function arrmap([head, ...tail], fn) {   
return tail.length === 0 ? [fn(head)] : [fn(head), ...map(tail, fn)];
}

最佳答案

您需要映射和过滤器的递归组合。在这种情况下,我只会使用带有 for...of 循环的递归函数:

const fn = arr => {
const r = []

for(const item of arr) {
if(Array.isArray(item)) r.push(fn(item))
else if(item === 'h') r.push('h', 'f')
else if(item !== 'f') r.push(item)
}

return r;
}

const data = [['a','b','c'],['d','e',['f','g']],['h','i','j']]

const result = fn(data)

console.log(result)

如果您需要更通用的方法,您可以提取fn:

const nestedMap = (arr, fn) => 
arr.reduce((r, item) => {
const val = Array.isArray(item) ? [nestedMap(item, fn)] : fn(item)

return val !== undefined ? r.concat(val) : r
}, [])

const data = [['a','b','c'],['d','e',['f','g']],['h','i','j']]

const result = nestedMap(data, item => {
if (item === 'h') return ['h', 'f']
if (item !== 'f') return item
})

console.log(result)

关于javascript - 如何使用 ES6 在 javascript 中删除或添加项目到锯齿状数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57171698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com