在 JSON 对象中,父键名称删除并包含其内部内容
In JSON Object parent key name remove and Include its inner content
这是我的JSON对象,我想从json中删除"item"键,并希望保留其内部对象包含"子"及其树,如JOSN。我该怎么做?
[
{
"item": {
"id": 11865,
"parentid": null,
"levelid": 63,
"name": "Total"
},
"children": [
{
"item": {
"id": 10143,
"parentid": 11865,
"levelid": 19,
"name": "Productive"
}
}
]
}
]
如果我理解您希望对象正确显示后的外观,那么这应该可以解决问题:
var arrayOfObjects = [
{
"item": {
"id": 11865,
"parentid": null,
"levelid": 63,
"name": "Total"
},
"children": [
{
"item": {
"id": 10143,
"parentid": 11865,
"levelid": 19,
"name": "Productive"
}
}
]
}
]
arrayOfObjects.forEach(function(obj) {
obj.id = obj.item.id;
obj.parentid = obj.item.parentid;
obj.levelid = obj.item.levelid;
obj.name = obj.item.name;
delete obj.item;
});
所做的只是手动将数据从obj.item
移动到obj
,然后完全删除obj.item
。
我会这样做:
//your original array of objects
var array = [{
"item": {
"id": 11865,
"parentid": null,
"levelid": 63,
"name": "Total"
},
"children": [
{
"item": {
"id": 10143,
"parentid": 11865,
"levelid": 19,
"name": "Productive"
}
}
]
}, ...];
array.forEach(function(parent) {
flattenKey(parent, 'item');
});
function flattenKey(parent, keyName) {
var section = parent[keyName];
var child = section ? section : {};
var keys = Object.keys(child);
keys.forEach(function(key) {
parent[key] = child[key];
})
delete parent[keyName];
}
基本上,函数flattenKey将扁平化给定对象的任何键(给定其键)。
- 逻辑类似于此处的其他解决方案:循环访问子键并将其值分配给父对象(平展)。
- 然后,它会在步骤 1 之后删除子密钥。
试试
objArray = objArray.map( function(value){
var item = value.item;
for( var key in item )
{
value[key] = item[key];
}
delete value.item;
return value;
});
演示
解释
1) 使用 map
迭代这个给定数组的每个项目 (value
objArray
)。
2)获取value
的item
属性,直接分配给value
3)最后删除value
的item
属性。
更快的选择
objArray = objArray.map( function(value){
var item = value.item;
var itemKeys = Object.keys(item);
for( var counter = 0; counter < itemKeys.length; counter++ )
{
value[itemKeys[counter]] = item[itemKeys[counter]];
}
delete value.item;
return value;
});
您可以使用递归,它保留item
的内容并添加 child 属性。
function delItem(a, i, aa) {
var children = a.children;
if (a.item) {
aa[i] = a.item;
aa[i].children = children;
delete a.item;
}
Array.isArray(children) && children.forEach(delItem);
}
var array = [{ "item": { "id": 11865, "parentid": null, "levelid": 63, "name": "Total" }, "children": [{ "item": { "id": 10143, "parentid": 11865, "levelid": 19, "name": "Productive" } }] }];
array.forEach(delItem);
document.write('<pre>' + JSON.stringify(array, 0, 4) + '</pre>');
相关文章:
- 如何删除包含内容可编辑跨度的整个跨度元素
- 使用jquery删除包含的行
- 如何删除包含特定子项的 li
- Javascript:从数组中删除包含带有侦听器的对象的项目的最佳方法
- Javascript函数'的属性,该属性包含其代码
- 如何删除包含包含某些数据的单元格的表行
- 在 JSON 对象中,父键名称删除并包含其内部内容
- 删除空
的功能可删除包含内容的
- Javascript 删除包含相同数字的行
- 如何删除包含所有空值的数组列
- 正则表达式,用于从字符串中删除包含内容和 HTML 代码的所有标记
- 如何将 ID 数组与包含其 ID 作为属性名称一部分的对象属性进行匹配
- RE-在PHP页面中打印包含其数据的特定表单
- 从数组中删除知道其id的对象
- 删除包含Objects MongoDB的数组
- 如何删除从其列表中拉出的项目
- JSON正在删除包含空值的属性
- 删除包含指定内容的元素
- 删除包含特定单词的对象/字段
- 删除包含星号或点的单词