2014-07-16 291 views
20

我在下面有这个JSON对象;从JSON对象中删除键值对

[ 
    { 
     XXX: "2", 
     YYY: "3", 
     ZZZ: "4" 
    }, 
    { 
     XXX: "5", 
     YYY: "6", 
     ZZZ: "7" 
    }, 
    { 
     XXX: "1", 
     YYY: "2", 
     ZZZ: "3" 
    } 
] 

我想从json对象中删除YYY键值,使得新的json对象看起来像这样;

[ 
    { 
     XXX: "2",  
     ZZZ: "4" 
    }, 
    { 
     XXX: "5",  
     ZZZ: "7" 
    }, 
    { 
     XXX: "1",  
     ZZZ: "3" 
    } 
] 

我试过delete jsonObject['YYY']但这是不正确的。这怎么能在JavaScript中完成?谢谢。

+0

这个问题更多的是处理对象的数组比什么都做与JSON ..一旦你有一个Javascript对象,你在内存中操作,它开始生活的事实,因为JSON并没有真正进入它。 –

+0

[从JSON对象删除元素]的可能重复(http://stackoverflow.com/questions/15451290/remove-element-from-json-object) –

回答

44

你称之为'JSON对象'的确是一个JSON数组对象。你必须遍历每个并单独删除每个成员:在数组中的值

for(var i = 0; i < jsonArr.length; i++) { 
    delete jsonArry[i]['YYY']; 
} 
+0

谢谢。验证是正确的答案。 – user781486

+0

谢谢.......是它的完美工作 –

1

jsonObject是一个数组,因此您需要引用数组元素。尝试delete jsonObject[0].YYY

4

迭代,并删除与键YYY值:

var obj = [ 
    { 
     XXX: "2", 
     YYY: "3", 
     ZZZ: "4" 
    }, 
    { 
     XXX: "5", 
     YYY: "6", 
     ZZZ: "7" 
    }, 
    { 
     XXX: "1", 
     YYY: "2", 
     ZZZ: "3" 
    } 
]; 

for (var i = 0; i < obj.length; i++) { 
    delete obj[i].YYY 
} 
+0

正确的答案。但我只能将一个答案标记为StackOverflow上的正确答案。抱歉。 – user781486

1

因为你JSON是一个数组的内,您需要访问阵列中的每个元素并删除它们的属性“YYY”或使用地图来创建简化对象,如下所示:

var objs = [ 
    { 
     XXX: "2", 
     YYY: "3", 
     ZZZ: "4" 
    }, 
    { 
     XXX: "5", 
     YYY: "6", 
     ZZZ: "7" 
    }, 
    { 
     XXX: "1", 
     YYY: "2", 
     ZZZ: "3" 
    } 
]; 

objs = objs.map(function(obj) { 
    return { XXX: obj.XXX, ZZZ: obj.ZZZ }; 
}); 

U唱出map函数。 MDN: Array.prototype.map()

+0

你的答案和Justin的 –

+0

完全一样,不是。这是使用'地图' –

+0

你甚至没有正确使用地图。既然你没有创建一个新的数组,最好的做法是使用forEach而不是map。另外,你的答案确实不会增加任何问题。如果你不需要退货,那么可以使用 –

1

JSON是文本,所以如果你真的有这样的文字:

var s = '[{XXX:"2",YYY:"3",ZZZ:"4"},{XXX:"5",YYY:"6",ZZZ:"7"},{XXX:"1",YYY:"2",ZZZ:"3"}]'; 

那么你可以使用字符串替换删除YYYs,是这样的:

s.replace(/YYY[^,}]+,/g,''); // [{XXX:"2",ZZZ:"4"},{XXX:"5",ZZZ:"7"},{XXX:"1",ZZZ:"3"}] 

您可能需要帐户YYY在字符串的开头或结尾。如果您有一个由对象文字创建的对象,请使用其他答案之一。

+0

有趣的做法。即使它是一个文本字符串,我倾向于选择转换为对象,然后用JS而不是正则表达式来过滤它。值得注意的是,有效的JSON也需要引用密钥。所以它会是''[{“XXX”:“2”,“YYY”:“3”,“ZZZ”:“4”},...]';',你必须考虑报价也标记。 – nbrooks

0

避免突变原来的数组,并使用更现代的功能另一种解决方案(对象其余运营商&解构)

const arr = [ 
 
    { 
 
     XXX: "2", 
 
     YYY: "3", 
 
     ZZZ: "4" 
 
    }, 
 
    { 
 
     XXX: "5", 
 
     YYY: "6", 
 
     ZZZ: "7" 
 
    }, 
 
    { 
 
     XXX: "1", 
 
     YYY: "2", 
 
     ZZZ: "3" 
 
    } 
 
] 
 

 
// destructure 'YYY' and return the other props only 
 
const newArray = arr.map(({YYY, ...rest}) => rest) 
 

 
console.log(newArray)