Javascript (递归)如何从具有嵌套对象和数组的对象中获取所有键/值对
我有一个像这样的对象:Javascript (递归)如何从具有嵌套对象和数组的对象中获取所有键/值对,javascript,arrays,function,object,recursion,Javascript,Arrays,Function,Object,Recursion,我有一个像这样的对象: { "id": 45745049 "seller": { "first_name": "Sam", "last_name": "Smith", "email": "s
{
"id": 45745049
"seller": {
"first_name": "Sam",
"last_name": "Smith",
"email": "samsmith@smith.com",
"phone": {
"number": "1111-1111",
"verified": false
},
},
"order_items": [
{
"item": {
"id": "29239765",
"title": "item1",
"colors": [
"red",
"green",
"blue"
]
},
"quantity": 1,
"unit_price": 230,
},
{
"item": {
"id": "238457363",
"title": "item2",
"colors": [
"red"
]
},
"quantity": 2,
"unit_price": 110,
}
],
"date_created": "2020-08-03T12:17:25.000-04:00",
"date_last_updated": "2020-08-03T16:51:35.61Z"
}
我想要一个数组,数组中的每个键对都具有值
例如:
[
["id", 45745049],
["first_name", "Sam"],
.....,
["phone.number", "1111-1111"],
["phone.verified", false],
....etc
]
在那之前一切都好。问题是当属性是对象数组时。我想要的输出如下:
[
...,
["order_items1.item.id", 29239765],
["order_items1.item.colors1", "red"],
["order_items1.item.colors2", "green"],
...,
["order_items2.item.id", 238457363],
["order_items2.item.colors1", "red"],
...etc
]
因此需要检查属性是否为数组,如果是,则添加位置号
我知道我需要一个递归函数,但我不知道怎么做。
这是我到现在为止得到的
getObjectKeys = (obj) => {
let FieldName = "";
let FieldValue = "";
for(var prop in obj) {
FieldName += prop;
if(!(prop instanceof Array) && (typeof prop !== "object") && obj[prop]) {
FieldValue = obj[prop];
} else if(prop instanceof Array && prop.length !== 0){
prop.forEach((innerItem, i) => {
FieldName += `${i+1}.`;
// check if the inner item is an array or whatever an do it all again
// Dont know what to do here.
});
} else {
getObjectKeys(obj[prop]);
}
}
return [FieldName, FieldValue];
}
注意:我不想要空键或空键
如果有人能帮助我,我将非常感激。无论如何谢谢你 这与您要查找的内容非常相似。这是一种技巧
const getpath=(obj)=>
对象(obj)==obj
? Object.entries(obj).flatMap(([k,v])=>getpath(v).map(p=>[k,…p]))
: [[]]
常量路径=(ps)=>(obj)=>
ps.reduce((o,p)=>(o |{})[p],obj)
常数展平=(obj)=>
Object.fromEntries(getpath(obj).map(p=>p.join('.')、path(p)(obj)])
const input={id:45745049,卖方:{名:“萨姆”,姓:“史密斯”,电子邮件:samsmith@smith.com,电话:{号码:“1111-1111”,核实:假},订单项目:[{项目编号:{id:{29239765”,标题:“项目1”,颜色:[“红”、“绿”、“蓝”]},数量:1,单价:230},{项目编号:{id:“238457363”,标题:“项目2”,颜色:[“红”},数量:2,单价:110),创建日期:“2020-08-03T12:17:25.000-04:00”,最后更新日期:“2020-08-03T16:51:35.61Z”
console.log(展平(输入))
.as控制台包装{min height:100%!important;top:0}
是否确实要[“order_items1.item.id”,29239765]
?这不是一个正确的数组,因为键中有点。例如,如果从该数组生成console.log,则不会显示该键/值对。您只能通过arr[“order\u items1.item.id”]
@Sascha通过arr[“order\u items1.item.id”]对其进行寻址来获取值是的,我知道。但是我不想以后再使用那把钥匙。只需要把钥匙当琴弦谢谢你!!我不完全理解代码,也许我需要做一些调整,但这正是我想要的(某种程度上)。我以后会更仔细地读它,因为我的头现在要爆炸了,哈哈。再次感谢你,你是个天才。