提取Javascript对象中的嵌套值
我的目标如下:提取Javascript对象中的嵌套值,javascript,arrays,object,Javascript,Arrays,Object,我的目标如下: var result = [{ "id": 89304, "employeeDetails": { "id": 102524, "version": 9 } }]; 这是一个较大对象的片段,我正试图将它推送到MySQL表中。 我试图实现的是将值提取到它们自己的数组中,该数组将返回以下内容: [ '89304', '102524', '9' ] 这样,我可以轻松地将值推送到DB 我尝试了以下操作,无需嵌套即可正常工作: obKeys=Object.keysres
var result = [{
"id": 89304,
"employeeDetails": {
"id": 102524,
"version": 9
}
}];
这是一个较大对象的片段,我正试图将它推送到MySQL表中。
我试图实现的是将值提取到它们自己的数组中,该数组将返回以下内容:
[ '89304', '102524', '9' ]
这样,我可以轻松地将值推送到DB
我尝试了以下操作,无需嵌套即可正常工作:
obKeys=Object.keysresult;
console.logobKeys
但是,通过嵌套,我得到的结果如下:
['0']
有人能告诉我哪里出了问题,或者建议一种更好的方法吗
谢谢。您可以编写一个递归函数,以列表形式返回值。只需使用forEach遍历键,如果值是对象,则调用自身 从结果列表中获取数据,并逐个输入myList。 @吉姆·多佛试试这个
var myList;
myList.push(result[0].id);
myList.push(result[0].employeeDetails.id);
myList.push(result[0].employeeDetails.version);
或者干脆
result.forEach(function(item,index) {
var TempList;
TempList.push(item.id);
TempList.push(item.employeeDetails.id);
TempList.push(item.employeeDetails.version);
myList.push(TempList);
});
这是因为“result”实际上是一个数组,所以输出的键是数组中整个对象的键 要从对象中提取值,首先必须遍历数组,然后针对每个项遍历keys object.keysobj 这里有一个粗略的例子,希望对你有所帮助
var result = [{
"id": 89304,
"employeeDetails": {
"id": 102524,
"version": 9
}
}];
for (var i = 0; i < result.length; i++) {
var item = result[i];
Object.keys(item).forEach(function(key) {
console.log(item[key]); // This will provide you the value for each key.
});
}
由于对象中的一个属性也是and对象,因此您必须检查该属性,然后进一步对其进行迭代。只需在结果数组中循环,就可以了
var结果=[
{
身份证号码:89304,
雇员详情:{
身份证号码:102524,
版本:9
}
},
{
身份证号码:89123,
雇员详情:{
身份证号码:102456,
版本:18
}
}
];
var arr1=result.mapfunctionitem{
return[item.id,item.employeeDetails.id,item.employeeDetails.version];
};
/*ES6语法*/
让arr2=result.mapitem=>[item.id,item.employeeDetails.id,item.employeeDetails.version];
console.logarr1;
console.logarr2 结果本身就是一个数组,其中的键默认为0,1,2,所以得到的是0 这就是你想要的
var result = [{
"id": 89304,
"employeeDetails": {
"id": 102524,
"version": 9
}
}];
var finalresult = [];
result.forEach(function(record) {
console.log(getObjValue(record));
})
function getObjValue(obj) {
var keys = Object.keys(obj);
for (i = 0; i < keys.length; i++) {
if (typeof obj[keys[i]] == 'object') {
getObjValue(obj[keys[i]]);
} else {
finalresult.push(obj[keys[i]])
}
}
return finalresult
}
对于任何嵌套的JSON,请尝试此操作- var结果=[{ 身份证号码:89304, 雇员详情:{ 身份证号码:102524, 版本:9, 地址:{ 国家:美国, 城市:洛杉矶 } } }]; 函数get_itobj{ obj中的forvar prop{ IftypeofOBJ[prop]=“对象”{ //反对 获得[道具]; }否则{ //别的 console.logobj[prop]+'; } } } 得到结果; multiArr将包含数组的数组。我希望这有帮助。通过
console.logarr;1您正在调用数组而不是对象上的Object.keys。2如果它是一个对象,object.keys将返回键而不是值。3 JavaScript无法保证对象属性的顺序,因此结果数组的顺序也无法保证。实际上,您有一个对象数组,在示例中是一个对象数组。较大对象的实际结构是什么?@Jim Dover试试看,这可能有帮助+1如果数据结构和键不变,这很好。它不是最健壮的,但是如果数据结构是静态的,它就不一定是最健壮的。它也是最干净、最易管理的,这意味着很多。
var multiArr =[];
var arr = [];
function deepTraverse(obj) {
if( typeof obj == "object" ) {
$.each(obj, function(k,v) {
deepTraverse(v);
});
}
else {
arr.push(obj);
}
}
$.each(result,function(k,v){
deepTraverse(v);
multiArr.push(arr);
arr = [];
});
console.log(multiArr);