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
语句好吗?如果键不存在(第一次找到新组),它将创建一个空数组。