删除以特定字母

时间:2016-06-23 11:02:38

标签: javascript

如果我有这个:

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',
..}

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;
&#13;
&#13;

修改

这是什么意思?制作原型功能?如果没有,您可能需要了解如何定义和执行函数。

&#13;
&#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;
&#13;
&#13;

让我们再试一次......

如果要调用 LIKE A PROPERTY 功能,则需要在对象上定义它。

这是一个HACK,这不会在生产代码中使用。

&#13;
&#13;
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;
&#13;
&#13;