Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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_Jquery - Fatal编程技术网

Javascript 如何基于属性值拆分数组而不更改键的顺序?

Javascript 如何基于属性值拆分数组而不更改键的顺序?,javascript,jquery,Javascript,Jquery,我有这样一个数组: var test_array = [ { "test_name":"vna", "header_region":"vna_results", "header_name":"larm", "value_title":"area"}, { "test_name":"vna", "header_region":"vna_results", "header_name":"larm", "value_title":"area"}, { "test_name":"lma", "heade

我有这样一个数组:

var test_array = [
{
"test_name":"vna",
"header_region":"vna_results",
"header_name":"larm",
"value_title":"area"},
{
"test_name":"vna",
"header_region":"vna_results",
"header_name":"larm",
"value_title":"area"},
{
"test_name":"lma",
"header_region":"lma_results",
"header_name":"larm",
"value_title":"area"},
{
"test_name":"lma",
"header_region":"lma_results",
"header_name":"larm",
"value_title":"area"},
{
"test_name":"uni",
"header_region":"uni_results",
"header_name":"larm",
"value_title":"area"},
{
"test_name":"uni",
"header_region":"uni_results",
"header_name":"larm",
"value_title":"area"}
]
我想根据属性值将其拆分为对象:header\u name

{
"vna_results":[
{
"test_name":"vna",
"header_region":"vna_results",
"header_name":"larm",
"value_title":"area"
},
{
"test_name":"vna",
"header_region":"vna_results",
"header_name":"larm",
"value_title":"area"
}
],
"lma_results":[
{
"test_name":"vna",
"header_region":"lma_results",
"header_name":"larm",
"value_title":"area"
},
{
"test_name":"vna",
"header_region":"lma_results",
"header_name":"larm",
"value_title":"area"
}
],
"uni_results":[
{
"test_name":"vna",
"header_region":"uni_results",
"header_name":"larm",
"value_title":"area"
},
{
"test_name":"vna",
"header_region":"uni_results",
"header_name":"larm",
"value_title":"area"
}
]
}
我正在使用以下函数来实现这一点:

function groupBy(arr, property) {
        return arr.reduce(function(memo, x) {
            if (!memo[x[property]]) { memo[x[property]] = []; }
            memo[x[property]].push(x);
            return memo;
        }, {});
 }



 var splitted =  groupBy(test_array, 'header_region');

but the output result changed the order of keys: lma_results first then uni and then vna..
lmi_results:{...},
uni_results:{...},
vna_results:{...},

expected order- same as in array 
i don't want to change the order. how to achieve this. Thanks in advance.
var测试\u数组=[{
“测试名称”:“vna”,
“标题区域”:“vna结果”,
“标题名称”:“larm”,
“价值标题”:“区域”
},
{
“测试名称”:“vna”,
“标题区域”:“vna结果”,
“标题名称”:“larm”,
“价值标题”:“区域”
},
{
“测试名称”:“lma”,
“标题区域”:“lma结果”,
“标题名称”:“larm”,
“价值标题”:“区域”
},
{
“测试名称”:“lma”,
“标题区域”:“lma结果”,
“标题名称”:“larm”,
“价值标题”:“区域”
},
{
“测试名称”:“uni”,
“标题区域”:“统一结果”,
“标题名称”:“larm”,
“价值标题”:“区域”
},
{
“测试名称”:“uni”,
“标题区域”:“统一结果”,
“标题名称”:“larm”,
“价值标题”:“区域”
}
]
常量结果=测试数组。减少((acc,x)=>({
…acc,
[x.header_region]:[…(acc[x.header_region]| |[]),x]
}), {});

console.log(result)
对象中键的顺序永远无法保证。如果您需要这种保证,则必须更改数据结构以使用值数组,因为只有这样才能保留顺序。您可以按值对它们进行排序,但这将导致升序或降序,而不是实际顺序。正如@ RoryMcCrossan所建议的,你应该排列而不是对象。如果你需要继续排序,考虑使用对象以外的东西。或者可能使用一个额外的数组来保存键的顺序?你能为你的答案添加一些解释吗?好的,但请添加解释这对我会有帮助。结果更改了数组的顺序输出中的键与你想要的一致。。。据我所见。。