Javascript 将数组项推送到命名索引

标签 javascript arrays loops indexing multidimensional-array

我有一个 JSON 数组:

[{ id: 1, client: "Microsoft" },{ id: 2, client: "Microsoft" },{ id: 3, client: "Apple" }]

我想按“客户端”对其进行分组,但我在 javascript 中遇到了困难。在 PHP 中我通常会做这样的事情:

$group = array();

foreach ($array as $item) {

    $group[ $item['client'] ] = $item;

}

return $group;

但是这个方法在多维数组的 javascript 中完全不起作用

var group = [];

for ( i=0 ... ) {

  var client = array[i].client;

  group[ client ].push( array[i] );

}

我如何将上面的数组分组为这样的:

[{ "Microsoft": [{...}], "Apple":[{...}] }]

甚至

[{ client: "Microsoft", "items": [{...}] }, { client: "Apple", items: [{...}] }]

最佳答案

为此,您需要一个对象,而不是数组:

var array = [{ id: 1, client: "Microsoft" },{ id: 2, client: "Microsoft" },{ id: 3, client: "Apple" }];
var group = {};
for (var i=0; i<array.length; i++) {
  var client = array[i].client;
  group[client] = group[client] || []; // create array for client if needed
  group[client].push(array[i]);
}
console.log(group);

请务必记住,生成的对象将包含对原始数组中对象的引用。例如:

array[0].id = 100;
group.Microsoft[0].id; // 100

关于Javascript 将数组项推送到命名索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16722962/

相关文章:

javascript - 为什么 Array.prototype.reduce() 不将空数组作为累加器?

java - 检查一个字符在字符串中连续出现了多少次

javascript - 在警报框中打印函数的结果

c - 从二维字符数组初始化指向字符的指针数组

javascript - 匹配两个 ng-repeats 的对象属性

javascript - 使用 .each 从表创建字符串,如何在每行后添加换行符?

javascript - 单击按钮将代码添加到JS

javascript - 为什么这个 for 循环添加的嵌套对象比预期更多?

javascript - 使 jQuery 顶部工具栏不那么跳动

带有正则表达式的 JavaScript 表单验证邮寄地址不起作用!