如果我有这个:
var result = [
{ A: '0', b1: '0' },
{ B: '1', b2: '1' },
{ C: '2', b3: '2' }
];
如何删除以'b'开头的键? (和/或第二个键/值对)
所以,要:
result = [
{ A: '0'},
{ B: '1'},
{ C: '2'}
];
并且可以像:
一样打电话 result.letters
,
console.log(result.letters) =
"letters" :
{
'A' : '0',
'B' : '1',
'C' : '2',
..}
答案 0 :(得分:3)
试
result = result.map(function(obj){
Object.keys(obj).forEach(function(key){
key.indexOf("b") == 0 && delete obj[key];
});
return obj;
})
要将其称为result.letters
,而不是直接将其称为result
,请进行以下修改
var letters = result.map(function(obj){
Object.keys(obj).forEach(function(key){
key.indexOf("b") == 0 && delete obj[key];
});
return obj;
});
result = { letters: {}};
letters.forEach(function(obj){
var keyName = Object.keys(obj)[0];
result.letters[ keyName ] = obj[ keyName ];
});
答案 1 :(得分:2)
您可以使用String.prototype.startsWith()
功能并删除密钥。
var results = [
{ A: '0', b1: '0' },
{ B: '1', b2: '1' },
{ C: '2', b3: '2' }
];
results.forEach(function(result) {
for (var key in result) {
if (key.startsWith('b')) {
delete result[key];
}
}
});
document.body.innerHTML = '<pre>' + JSON.stringify(results, null, 4) + '</pre>';
&#13;
var results = [
{ A: '0', b1: '0' },
{ B: '1', b2: '1' },
{ C: '2', b3: '2' }
];
Array.prototype.letters = function(letter) {
return {
letters : this.map(function(obj) {
return Object.keys(obj).reduce(function(result, key) {
if (!key.startsWith(letter)) {
result[key] = obj[key];
}
return result;
}, {});
})
};
}
var letters = results.letters('b');
document.body.innerHTML = '<pre>' + JSON.stringify(letters, null, 4) + '</pre>';
&#13;
如果要调用 LIKE A PROPERTY 功能,则需要在对象上定义它。
这是一个HACK,这不会在生产代码中使用。
var results = [
{ A: '0', b1: '0' },
{ B: '1', b2: '1' },
{ C: '2', b3: '2' }
];
Object.defineProperty(results, 'letters', {
value: {
letters : results.map(function(obj) {
return Object.keys(obj).reduce(function(result, key) {
if (!key.startsWith('b')) {
result[key] = obj[key];
}
return result;
}, {});
})
}
});
var letters = results.letters;
document.body.innerHTML = '<pre>' + JSON.stringify(letters, null, 4) + '</pre>';
&#13;