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

JavaScript展平对象数组

JavaScript展平对象数组,javascript,arrays,loops,flatten,Javascript,Arrays,Loops,Flatten,我有一个数组,它包含几个数组,每个数组包含几个对象,与此类似 [[object1, object2],[object1],[object1,object2,object3]] 这是登录到控制台的对象的屏幕快照。 什么是将其展平的最佳方法,使其成为一个对象阵列 我试过这个,但运气不好: console.log(searchData); var m = [].concat.apply([],searchData); console.log(m); searchData注销上面的

我有一个数组,它包含几个数组,每个数组包含几个对象,与此类似

[[object1, object2],[object1],[object1,object2,object3]]
这是登录到控制台的对象的屏幕快照。

什么是将其展平的最佳方法,使其成为一个对象阵列

我试过这个,但运气不好:

console.log(searchData);  
  var m = [].concat.apply([],searchData);    
console.log(m);
searchData注销上面的屏幕截图,但m注销[]

以下是searchData的实际内容:

[[{"_id":"55064111d06b96d974937a6f","title":"Generic Title","shortname":"generic-title","contents":"<p>The Healing Center offers practical, social, and spiritual support to individuals and families. Services include, but are not limited to: food and clothing, job skills training and job search assistance, auto repair (Saturdays only), mentoring, financial counseling, tutoring, prayer, life skills training, and helpful information about local community services.</p><p>Stay in touch with us:</p>","__v":0},{"_id":"5508e1405c621d4aad2d2969","title":"test english","shortname":"test-page","contents":"<h2>English Test</h2>","__v":0}],[{"_id":"550b336f33a326aaee84f883","shortname":"ok-url","title":"now english","contents":"<p>okokko</p>","category":"Transportation","__v":0}]]
治疗中心为个人和家庭提供实用、社会和精神支持。服务包括但不限于:食品和服装、职业技能培训和求职帮助、汽车修理(仅周六),辅导,财务咨询,家教,祈祷,生活技能培训,以及关于当地社区服务的有用信息。

与我们保持联系:

,“uu v”:0},{uID:“5508E1405C621D4AAD2969”,“标题:”“测试英语”,“短名”:“测试页面”,“内容:”“英语测试”,“u v”:0},{uID:“550B336F3326AEE84F883”,“短名”:“ok url”,“标题”:“现在的英语”,“内容”:“okokko

”,“类别”:“运输”和“\u v”:0}]] 您可以像下面这样使用:-

var arr = [['object1', 'object2'],['object1'],['object1','object2','object3']];
var flattened = [].concat.apply([],arr);
展平
将是您期望的阵列

ES 2020提供了列表的平面列表,如果您想迭代:

[['object1'],['object2'].flat()/['object1',object2']

如果您只需要简单的展平,这可能适用于:

var arr = [['object1', 'object2'],['object1'],['object1','object2','object3']];
var flatenned = arr.reduce(function(a,b){ return a.concat(b) }, []);
对于更复杂的展平,Lodash具有展平功能,这可能是您需要的:


递归展平数组:

函数展平(数组){
return!Array.isArray(数组)?数组:[].concat.apply([],Array.map(展平));
}
var YourFlattedArray=Flatte([[{“_id:“55064111d06b96d974937a6f”,“标题”:“通用标题”,“简称”:“通用标题”,“内容”:”康复中心为个人和家庭提供实用、社会和精神支持。服务包括但不限于:食品和服装、工作技能培训和求职帮助、汽车维修(仅周六),辅导,财务咨询,辅导,祈祷,生活技能培训,以及有关当地社区服务的有用信息。

与我们保持联系:

,“u v”:0},{u id:“5508e1405c621d4aad2969”,“标题:”“测试英语”,“短名”:“测试页面”,“内容”:“英语测试”,“u v”:0},{u id:“550b33a33aAEE84f883”,“短名”:“ok url”,“标题:“now english”,“contents:“okokko

”,“category:“Transportation”,“_uv”:0}]] ); 原木(整平阵列); 功能日志(数据){
document.write('一个用于深度(嵌套)展平的递归解决方案:

函数展平(a){
返回Array.isArray(a)?[].concat.apply([],a.map(展平)):a;
}
ES6更紧凑一些:

function *F(a) {
  if (Array.isArray(a)) for (var e of a) yield *F(e); else yield a;
}

>> console.log(Array.from(F([1, [2], 3])));
<< [ 1, 2, 3 ]
为了好玩,可以使用名为“展平”的生成器
F
,惰性地生成展平值:

let functional = {
    flatten (array) {
        if (Array.isArray(array)) {
            return Array.prototype.concat(...array.map(this.flatten, this));
        }

        return array;
    }
};

functional.flatten([0, [1, 2], [[3, [4]]]]); // 0, 1, 2, 3, 4
函数*F(a){
如果(a的变量e)的(数组isArray(a))产生*F(e);否则产生a;
}
>>log(Array.from(F([1,2,3]));
使用ES6扩展运算符

Array.prototype.concat(…searchData)

[].concat(…搜索数据)
让nestedArray=[[1,2]、[3,4]、[5,6];
设FlatteArray=函数(NesteArray){
设flattarr=[];
nestedArray.forEach(函数(项){
压扁推力(…项);
});
返回平面arr;
};
log(扁平阵列(嵌套阵列));//[1,2,3,4,5,6]
结果


我注意到人们使用的递归对成本不友好,特别是新的ES6标准赋予了我们扩展运算符的功能。当您将项目推入主阵列时,只需使用…它将自动添加展平对象。类似于

function flatten(i,arrayField){
  if(Array.isArray(i)) return i.map(c=>flatten(c,arrayField));
  if(i.hasOwnProperty(arrayField)) return [{...i,[arrayField]:null},...i[arrayField].map(c=>flatten(c,arrayField))];
  return {...i,[arrayField]:null};
}

let data=flatten(myData,'childs');
您可以使用:

const data=[[{id:1},{id:2}],{id:3}]];
const result=data.flat();
控制台日志(结果);
//可以指定深度
constdata2=[[[{id:1}],{id:2}],{id:3}];
const result2=data2.flat(2);

console.log(result2);
我的解决方案是展平对象数组并返回单个数组

flattarrayofobject=(arr)=>{
常数展平={};
arr.forEach((obj)=>{
Object.keys(obj.forEach)((key)=>{
展平[键]=对象[键];
});
});
返回平直;
};
范例

const arr=[
{
验证:{0':'xyzNot verified','1':'xyzVerified'},
角色id:{'1':'xyzMember','2':'xyzAdmin'},
双因素身份验证:{0':'No',1':'Yes'}
},
{状态:{0':'xyzInactive','1':'Active','2':'xyzSuspend'}
]
展平对象(arr)
// {
//验证:{0':'xyzNot verified','1':'xyzVerified'},
//状态:{0':'xyzInactive','1':'Active','2':'xyzSuspend'},
//角色id:{'1':'xyzMember','2':'xyzAdmin'},
//双因素身份验证:{0':'No',1':'Yes'}
// }

如果每个对象都有一个数组并以相同的嵌套方式继续:

[
{
    "id": 1,
    "title": "t1",
    "sort_order": 200,
    "childs": [
        {
            "id": 2,
            "title": "t2",
            "sort_order": 200,
            "childs": []
        },
        {
            "id": 3,
            "title":"mytitle",
            "sort_order": 200,
            "childs": []
        },
        {
            "id": 4,
            "title":"mytitle",
            "sort_order": 200,
            "childs": []
        },
        {
            "id": 5,
            "title":"mytitle",
            "sort_order": 200,
            "childs": []
        },
        {
            "id": 6,
            "title":"mytitle",
            "sort_order": 200,
            "childs": []
        }
    ]
},
{
    "id": 7,
    "title": "راهنما",
    "sort_order":"mytitle",
    "childs": [
        {
            "id": 8,
            "title":"mytitle",
            "sort_order": 200,
            "childs": []
        },
        {
            "id": 9,
            "title":"mytitle",
            "sort_order": 200,
            "childs": []
        },
        {
            "id": 10,
            "title":"mytitle",
            "sort_order": 200,
            "childs": []
        }
    ]
}
我的数据如下:


]

我喜欢
arr.reduce(函数(a,b){返回a.concat(b);});
因为某种原因,它给了我一个空[]。我尝试过的其他几种方法也有……我不知道为什么?如果所有选项都不起作用,那么你就错了。你能不能也发布searchData的内容?有效:出于某种原因,这会返回一个空数组。你知道为什么会出现这种情况吗?我甚至比我的reduce答案更喜欢这种方法。它在ar上有效ray在答案中提供。出于某种原因,我的数组返回[]。@byrdr您能发布您的具体尝试吗?@Mritunjay您能为您的代码添加解释吗?这是显示为什么选择[]的好例子.reduce vs.flattep!@dandavis好吧,他所需要做的就是指定
.flatte
的可选参数以获得深层行为,或者调用
.flattedeep
。这很有效!谢谢你,我会的
var arr = [1,[9,22],[[3]]];
var res = [];

function flatten(arr){
for(let i=0;i<arr.length;i++){
if(typeof arr[i] == "number"){
res.push(arr[i]);
}
else if(typeof arr[i] == "object"){
fatten(arr[i]);
}
}
}
flatten(arr);
console.log(res);
[1, 9, 22, 3]
array.push(...subarray1)    // subarray1 = [object1, object2]
array.push(...subarray2)    // subarray2 = [object3]
array.push(...subarray3)    // subarray3 = [object4,object5, object6]
// output -> array = [object1, object2, object3, object4, object5, object6]
function flatten(i,arrayField){
  if(Array.isArray(i)) return i.map(c=>flatten(c,arrayField));
  if(i.hasOwnProperty(arrayField)) return [{...i,[arrayField]:null},...i[arrayField].map(c=>flatten(c,arrayField))];
  return {...i,[arrayField]:null};
}

let data=flatten(myData,'childs');
[
{
    "id": 1,
    "title": "t1",
    "sort_order": 200,
    "childs": [
        {
            "id": 2,
            "title": "t2",
            "sort_order": 200,
            "childs": []
        },
        {
            "id": 3,
            "title":"mytitle",
            "sort_order": 200,
            "childs": []
        },
        {
            "id": 4,
            "title":"mytitle",
            "sort_order": 200,
            "childs": []
        },
        {
            "id": 5,
            "title":"mytitle",
            "sort_order": 200,
            "childs": []
        },
        {
            "id": 6,
            "title":"mytitle",
            "sort_order": 200,
            "childs": []
        }
    ]
},
{
    "id": 7,
    "title": "راهنما",
    "sort_order":"mytitle",
    "childs": [
        {
            "id": 8,
            "title":"mytitle",
            "sort_order": 200,
            "childs": []
        },
        {
            "id": 9,
            "title":"mytitle",
            "sort_order": 200,
            "childs": []
        },
        {
            "id": 10,
            "title":"mytitle",
            "sort_order": 200,
            "childs": []
        }
    ]
}