Javascript - 从javascript <string,string> map中删除元素

时间:2015-12-03 03:55:22

标签: javascript arrays dictionary

我有以下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返回。我怀疑它是因为元素的'属性'是一个字符串,我不确定如何解决这个问题。

2 个答案:

答案 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>