我有以下Javascript对象
[
"{\"id\":\"b00a3a47-783a-4af5-90d9-59c4deb7a9e3\",\"notes\":\"sdfsdf\",\"recordType\":0}",
"{\"id\":\"a6f72972-502e-452b-9773-51699a527122\",\"notes\":\"sdfsfdf\",\"recordType\":0}"
]
如何删除ID =“a6f72972-502e-452b-9773-51699a527122”的元素? (并不是字面意思是“a6f72972-502e-452b-9773-51699a527122”,这只是一个例子。
我试过以下
var index = detailsArray.map(function (element) {
console.log("element = " + JSON.stringify(element) + " index = " + index + " id = " + element.id);
return element.id;
}).indexOf(detailId);
console.log("index of " + detailId + " = " + index);
delete detailsArray[index];
但它将element.id作为undefined返回。我怀疑它是因为元素的'属性'是一个字符串,我不确定如何解决这个问题。
答案 0 :(得分:3)
它只是一个JSON字符串数组
如果要过滤它们,则只需解析每个项目并检查id
是否相等:
var arr = [
"{\"id\":\"b00a3a47-783a-4af5-90d9-59c4deb7a9e3\",\"notes\":\"sdfsdf\",\"recordType\":0}",
"{\"id\":\"a6f72972-502e-452b-9773-51699a527122\",\"notes\":\"sdfsfdf\",\"recordType\":0}"
];
var result = arr.filter(function(x) {
return JSON.parse(x).id !== 'a6f72972-502e-452b-9773-51699a527122';
});
这是工作JSFiddle demo。
答案 1 :(得分:1)
看起来你需要将这些字符串解析为JSON。为了提供一个实际上通过删除违规索引来改变detailsArray
的解决方案(而不是创建没有它的副本),这里有一种indexOf
使用Array.prototype.reduce
<回调的回调/ p>
var index = detailsArray.reduce(function(prev, curr, idx) {
return prev === -1 && JSON.parse(curr).id === detailId ?
idx : prev;
}, -1);
if (index > -1) {
detailsArray.splice(index, 1);
}
var detailsArray = [
"{\"id\":\"b00a3a47-783a-4af5-90d9-59c4deb7a9e3\",\"notes\":\"sdfsdf\",\"recordType\":0}",
"{\"id\":\"a6f72972-502e-452b-9773-51699a527122\",\"notes\":\"sdfsfdf\",\"recordType\":0}"
],
detailId = 'a6f72972-502e-452b-9773-51699a527122';
var index = detailsArray.reduce(function(prev, curr, idx) {
return prev === -1 && JSON.parse(curr).id === detailId ?
idx : prev;
}, -1);
if (index > -1) {
detailsArray.splice(index, 1);
}
document.getElementById('out').innerHTML += JSON.stringify(detailsArray, null, ' ');
<pre id="out">detailsArray = </pre>