javascript - 使用 LoDash 或类似工具规范化/展平 JS 数组?

标签 javascript lodash

我需要能够规范化 javascript 对象或将其展平,我希望能够使用 lodash 做一些事情,但我不知所措。我尝试编写自己的转换器,但它似乎太复杂了,我认为 lodash 可以做这样的事情。

我正在放置我拥有的原始阵列,它有 3 个带有子阵列的项目。 (见下文)

这是我所期望的(创建我的新对象),因此所有内容都被展平并添加到“名称”(请参阅​​下面的 testProduct1 和 testProduct2),如果没有可用的颜色和位置,则名称只是原始名称(请参阅下面的 testProduct3)。

{
   name: ‘testProduct1 RED NewYork’
},
{
   name: ‘testProduct1 RED London’
},
{
   name: ‘testProduct1 YELLOW NewYork’
},
{
   name: ‘testProduct1 YELLOW London’
},
{
   name: ‘testProduct2 WHITE NewYork’
},
{
   name: ‘testProduct2 WHITE London’
},
{
   name: ‘testProduct3’
}

这是原始数组的例子

{
    name: ‘testProduct1’,
    colors: [
       ‘RED’,
       ‘YELLOW’
    ],
    locations: [
       ‘New York’,
       ‘London’
    ]
},
{
    name: ‘testProduct2’,
    colors: [
       ‘WHITE’
    ],
    locations: [
       ‘New York’,
       ‘London’
    ]
},
{
    name: ‘testProduct3’,
}

最佳答案

这是一个纯 Javascript 解决方案。

var data = [{ name: 'testProduct1', colors: ['RED', 'YELLOW'], locations: ['New York', 'London'] }, { name: 'testProduct2', colors: ['WHITE'], locations: ['New York', 'London'] }, { name: 'testProduct3', }],
    flat = function (array) {
        var order = ['colors', 'locations'],
        r = [];
        array.forEach(function (a) {
            function getParts(parts) {
                if (parts.length >= order.length) {
                    parts.unshift(a.name);
                    r.push({ name: parts.filter(Boolean).join(' ') });
                    return;
                }
                (a[order[parts.length]] || ['']).forEach(function (b) {
                    getParts(parts.concat(b));
                });
            }
            getParts([]);
        });
        return r;
    }(data);

document.write('<pre>' + JSON.stringify(flat, 0, 4) + '</pre>');

关于javascript - 使用 LoDash 或类似工具规范化/展平 JS 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36065781/

相关文章:

javascript - 将滚动条添加到 d3.layout.tree()

javascript - 从对象数组中查找并删除对象

javascript - 从另一个对象生成一个对象并保留一组键的最简洁方法?

javascript - 尝试将函数转换为更实用的风格

javascript - 从 Angular 2 访问 jQuery 函数中设置的变量

javascript - 如何将包含对象的对象转换为对象数组

javascript - 如何在不使用正则表达式的情况下安全地区分 ISO 8601 字符串和在 queryParams 中存储为字符串的数字

javascript - Lo-dash 根据字符串值对对象数组进行排序

javascript - 通过 CSS 显示浏览器兼容性警报(网格支持)

javascript - 为什么在 JavaScript 中使用 'lib' 和 'src' 目录名?哪个是 'standard' ?