Javascript:从功能上拼接出多组数组

标签 javascript

假设我有一个对象,它包含 3 个不同大小的数组,其中字符串作为它们各自的一些元素类型,但也包含您不想迭代的冗余属性:例如如下:

let testobj = {
   prop1: ['a1','a2','a3'],
   prop2: ['a4','a5'],
   prop3: ['a7'],
   somepropthatyoudontwanttoiterate: 'hithere!'
}

当务之急是,如果我想拼接一个可能存在于这三个数组中任何位置的特定值,我可以这样做:

let a = 'a7'
for (let i=0; i<testobj.prop1.length; i++){ 
    if (a == testobj.prop1[i])
        testobj.prop1.splice(i, 1)
}
for (let i=0; i<testobj.prop2.length; i++){ 
    if (a == testobj.prop2[i])
        testobj.prop2.splice(i, 1)
}
for (let i=0; i<testobj.prop3.length; i++){ 
    if (a == testobj.prop3[i])
        testobj.prop3.splice(i, 1)
}

这很讨厌,而且极易出错,而且从长远来看可扩展性不强。

使用高阶函数来解决此问题的最佳函数式方法是什么?例如.map、.reduce、.sort、.filter?

最佳答案

您可以通过获取数组所需值的索引来获取对象和拼接的值。

虽然数组中只需要一个元素,但您可以采用 Array#some如果元素被拆分,则提前返回。

var testobj = { foo: 42, prop1: ['a1','a2','a3'], prop2: ['a4','a5'], prop3: ['a7'] },
    value = 'a7';

Object
    .values(testobj)
    .some(a => Array.isArray(a) && a.includes(value) && a.splice(a.indexOf(value), 1));

console.log(testobj);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于Javascript:从功能上拼接出多组数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48986062/

相关文章:

javascript - .wrap() 与调整大小函数一起使用时多次添加选择器

javascript - 在 Keystonejs 部分 View 中使用预定义的模型数据

javascript - jQuery 缓存和遍历对象

javascript - 如何在点击时动态加载/播放/暂停多源 HTML5 音频?

javascript - 如何计算 Canvas 中旋转形状的橡皮筋坐标 - javascript

javascript - 如何从一个div中选择一个元素到另一个?

javascript - React 如何在搜索中获取索引

javascript - React Select 异步选项未显示

javascript - AmCharts:有没有办法在 XYChart 上仅通过 X 轴进行缩放?

javascript - 我可以在不使用 new 关键字的情况下构造 JavaScript 对象吗?