2016-06-23 5 views
-2

Если у меня есть это:удалить ключи, которые начинаются с определенной буквы

var result = [ 

    { A: '0', b1: '0' }, 
    { B: '1', b2: '1' }, 
    { C: '2', b3: '2' } 
]; 

Как удалить ключи, которые начинаются с «Ъ»? (И/или второй ключ/значение пары)

Таким образом, чтобы иметь:

result = [ 

    { A: '0'}, 
    { B: '1'}, 
    { C: '2'} 
]; 

и быть в состоянии назвать как:

result.letters,

console.log(result.letters) = 

"letters" : 
{ 
    'A' : '0', 
    'B' : '1', 
    'C' : '2', 
..} 
+1

_ "и быть в состоянии назвать как: result.letters," _, что вы имеете в виду –

+0

Use array.map (функция (объект) {возвращение OBJ ..}) ; –

ответ

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 ]; 
}); 
+0

: Приятно, спасибо, но я хочу использовать sth как: 'result.letters', как я говорю в сообщении. – George

+0

@George попробуйте обновление – gurvinder372

+0

: Почти там! Я не хочу скобки в result.letters, как вы можете видеть в моем посте. Это возможно? Спасибо! – George

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>';


Редактировать

Это то, что вы имеете в виду? Сделать прототип функции? Если нет, вам может потребоваться прочитать, как определяются и выполняются функции.

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>';


Давайте попробуем это снова ...

Если вы хотите, чтобы вызвать функцию как свойство, вам нужно определить его на объекте ,

Это 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>';

+0

: Приятно, спасибо, но я хочу, чтобы иметь возможность использовать sth like: results.letters, как я говорю в сообщении. – George

+0

Что такое *** sth *** и почему «result.letters» возвращает объект с ключевыми «буквами» ??? –

+0

Возможно, OP хочет, чтобы эта функция была добавлена ​​в Array.prototype? sth означает что-то: p. Я думаю, он хочет называть его как функцию, например. результат.filteroutStringsWithB() и т.п. –

Смежные вопросы