Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从数组中生成包含相同字符串的子数组?_Javascript_Arrays_Grouping_Sub Array - Fatal编程技术网

Javascript 如何从数组中生成包含相同字符串的子数组?

Javascript 如何从数组中生成包含相同字符串的子数组?,javascript,arrays,grouping,sub-array,Javascript,Arrays,Grouping,Sub Array,我有这样一个数组: [ { "title": "name", "value": "" }, { "title": "version", "value": "" }, { "title": "inventory_name", "value": "" }, { "title": "inventory_version", "value": "" }, { "title": "differed", "value": "" }

我有这样一个数组:

[
{
    "title": "name",
    "value": ""
},
{
    "title": "version",
    "value": ""
},
{
    "title": "inventory_name",
    "value": ""
},
{
    "title": "inventory_version",
    "value": ""
},
{
    "title": "differed",
    "value": ""
},
{
    "title": "differed_name",
    "value": ""
},
{
    "title": "accept_error_while_reboot",
    "value": ""
},
{
    "title": "setup_check",
    "value": ""
},
{
    "title": "setup_install",
    "value": ""
},
{
    "title": "setup_install_partial",
    "value": ""
},
{
    "title": "params_install",
    "value": ""
},
{
    "title": "params_install_partial",
    "value": ""
},
{
    "title": "results_install_ok",
    "value": ""
},
{
    "title": "results_install_reboot_defered",
    "value": ""
},
{
    "title": "results_install_reboot_immediate",
    "value": ""
},
{
    "title": "results_install_partial_ok",
    "value": ""
},
{
    "title": "results_install_partial_reboot_defered",
    "value": ""
},
{
    "title": "results_install_partial_reboot_immediate",
    "value": ""
}
];
是否可以生成包含相同标题字段字符串的子数组

例如,在本例中,我将有:

array1 = [
 {
  "title": "differed",
  "value": ""
 },
 {
  "title": "differed_name",
  "value": ""
 }
]

array2 = [
 {
  "title": "setup_check",
  "value": ""
 },
 {
  "title": "setup_install",
  "value": ""
 },
 {
  "title": "setup_install_partial",
  "value": ""
 }
]
等等

如果是单个元素,我应该:

[
 {
 "title": "name",
 "value": ""
 }
]
我正在寻找一种通用的方法

例如,我知道我可以将
indexOf('results')
filter
函数一起使用,但是我希望可以避免硬代码,因为它的标题并不总是相同的

有什么想法吗


您可以使用对象对类似项目进行分组:

var groups = {};

parameter_list.forEach(function(p){ 
   var key = p.title.split('_')[0];
   if(!groups[key]) {
      groups[key] = [];
   }
   groups[key].push(p);
});
工作演示:

您可以使用对象对类似项目进行分组:

var groups = {};

parameter_list.forEach(function(p){ 
   var key = p.title.split('_')[0];
   if(!groups[key]) {
      groups[key] = [];
   }
   groups[key].push(p);
});
工作演示:

我提出了一个使用
Immutable.JS
的解决方案,但您可能可以使用
lodash
下划线来执行类似的操作。请注意,这是一个功能版本,不是必需的

首先创建一个获取前缀的函数:

function getPrefix(name) {
    var substr = name.substring(0, name.indexOf('_'))
    return substr ? substr : name;
}
然后使用
groupBy
功能:

Immutable.fromJS(arr).groupBy(element => getPrefix( element['title']))
            .toJS();

这将为您提供一个以标题为键的数组数组

我提出了一个使用
Immutable.JS
的解决方案,但您可能可以使用
lodash
下划线来执行类似的操作。请注意,这是一个功能版本,不是必需的

首先创建一个获取前缀的函数:

function getPrefix(name) {
    var substr = name.substring(0, name.indexOf('_'))
    return substr ? substr : name;
}
然后使用
groupBy
功能:

Immutable.fromJS(arr).groupBy(element => getPrefix( element['title']))
            .toJS();
这将为您提供一个以标题为键的数组数组

将数据分组为

var group=data.reduce(函数(结果、当前值){
var key=currentValue.title.split(“”)[0];
if(结果类型[键]=“未定义”){
结果[键]=[];
}
结果[键]。推送(当前值);
返回结果;
}, {});
然后(如果需要)使用将对象转换为“子阵列”

var subarray=Object.keys(groups).map(function(key){
返回组[键];
});
var数据=[{
“标题”:“名称”,
“值”:”
}, {
“标题”:“版本”,
“值”:”
}, {
“标题”:“存货名称”,
“值”:”
}, {
“标题”:“库存版本”,
“值”:”
}, {
“标题”:“不同”,
“值”:”
}, {
“标题”:“不同的名称”,
“值”:”
}, {
“标题”:“重新启动时接受错误”,
“值”:”
}, {
“标题”:“设置检查”,
“值”:”
}, {
“标题”:“安装”,
“值”:”
}, {
“标题”:“安装程序”\u部分”,
“值”:”
}, {
“标题”:“参数安装”,
“值”:”
}, {
“标题”:“参数安装部分”,
“值”:”
}, {
“标题”:“结果\安装\确定”,
“值”:”
}, {
“标题”:“结果\u安装\u重新启动\u延迟”,
“值”:”
}, {
“标题”:“结果\u安装\u重新启动\u立即”,
“值”:”
}, {
“标题”:“结果\安装\部分\确定”,
“值”:”
}, {
“标题”:“结果\u安装\u部分\u重新启动\u延迟”,
“值”:”
}, {
“标题”:“结果\u安装\u部分\u重新启动\u立即”,
“值”:”
}];
变量组=数据.reduce(函数(结果,当前值){
var key=currentValue.title.split(“”)[0];
if(结果类型[键]=“未定义”){
结果[键]=[];
}
结果[键]。推送(当前值);
返回结果;
}, {});
var子数组=对象。键(组)。映射(函数(键){
返回组[键];
});
log(JSON.stringify(子数组))将数据分组为

var group=data.reduce(函数(结果、当前值){
var key=currentValue.title.split(“”)[0];
if(结果类型[键]=“未定义”){
结果[键]=[];
}
结果[键]。推送(当前值);
返回结果;
}, {});
然后(如果需要)使用将对象转换为“子阵列”

var subarray=Object.keys(groups).map(function(key){
返回组[键];
});
var数据=[{
“标题”:“名称”,
“值”:”
}, {
“标题”:“版本”,
“值”:”
}, {
“标题”:“存货名称”,
“值”:”
}, {
“标题”:“库存版本”,
“值”:”
}, {
“标题”:“不同”,
“值”:”
}, {
“标题”:“不同的名称”,
“值”:”
}, {
“标题”:“重新启动时接受错误”,
“值”:”
}, {
“标题”:“设置检查”,
“值”:”
}, {
“标题”:“安装”,
“值”:”
}, {
“标题”:“安装程序”\u部分”,
“值”:”
}, {
“标题”:“参数安装”,
“值”:”
}, {
“标题”:“参数安装部分”,
“值”:”
}, {
“标题”:“结果\安装\确定”,
“值”:”
}, {
“标题”:“结果\u安装\u重新启动\u延迟”,
“值”:”
}, {
“标题”:“结果\u安装\u重新启动\u立即”,
“值”:”
}, {
“标题”:“结果\安装\部分\确定”,
“值”:”
}, {
“标题”:“结果\u安装\u部分\u重新启动\u延迟”,
“值”:”
}, {
“标题”:“结果\u安装\u部分\u重新启动\u立即”,
“值”:”
}];
变量组=数据.reduce(函数(结果,当前值){
var key=currentValue.title.split(“”)[0];
if(结果类型[键]=“未定义”){
结果[键]=[];
}
结果[键]。推送(当前值);
返回结果;
}, {});
var子数组=对象。键(组)。映射(函数(键){
返回组[键];
});

log(JSON.stringify(子数组))
请解释
if
语句好吗?如果键不存在(第一次找到新组),它将创建一个空数组。请解释
if
语句好吗?如果键不存在(第一次找到新组),它将创建一个空数组。