javascript - 使用 jQuery (JavaScript) 合并对象数组中多个相同键的值

标签 javascript arrays object associative-array

合并这样一个对象数组的优雅方式(jQuery 或 JavaScript)是什么:

var params = [
 {"name":"filter_color","value":"black"},
 {"name":"filter_color","value":"blue"},
 {"name":"filter_size","value":"l"},
 {"name":"filter_size","value":"m"}
];

进入:

var params = [
 {"name":"filter_color","value":"black,blue"},
 {"name":"filter_size","value":"l,m"}
]

稍后在 $.param(params) 中使用?

最佳答案

您可以使用哈希表并按所需的键对其进行分组。

function groupBy(array, key, fn) {
    var hash = Object.create(null);
    return array.reduce(function (r, o) {
        if (!hash[o[key]]) {
            hash[o[key]] = {};
            hash[o[key]][key] = o[key];
            r.push(hash[o[key]]);
        }
        fn(o, hash[o[key]]);
        return r;
    }, []);
}

var array = [{ name: "filter_color", value: "black" }, { name: "filter_color", value: "blue" }, { name: "filter_size", value: "l" }, { name: "filter_size", value: "m" }],
    result = groupBy(array, 'name', function (s, t) {
        t.value = t.value ? t.value + ',' + s.value : s.value;
    });

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

关于javascript - 使用 jQuery (JavaScript) 合并对象数组中多个相同键的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45735856/

相关文章:

JavaScript 按钮设置

javascript - 查找父div下的div元素的数量

c++ - 在不使用 vector 的情况下将字符串拆分为 C++ 中的数组

arrays - 使用 json_array_elements(json) 并获取项目排名

c++ - 使用值列表的模板数组初始化

java - 每次创建新的 Java 对象或重用一个

javascript - 使用 .attr() 方法的 JavaScript switch 语句的行为

javascript - 如何使排行榜 slider 横幅响应?

android - JSONObject 到自定义对象的转换

javascript - 在 Javascript 中测试未定义的嵌套对象