在JavaScript中修改对象数组

时间:2018-03-25 12:34:50

标签: javascript ecmascript-6

我有一个像这样的对象数组

[ { '0': { notify_item: '1' } },
  { '1': { notify_item: '2' } },
  { '2': { notify_item: '3' } } ]

现在,我想将'0'替换为'Invoice'之类的文本,将'0'键的值替换为{ 'sms': true,email:'false' }之类的值。 我希望用一些文本及其值来替换每个键,例如{ 'sms': true,email:'false' }

所以在替换后我想要这样的东西

[ { 'Invoice': { 'sms': true,email:'false' } },
  { 'ManualReminder': { 'sms': true,email:'false' },
  { 'AutomaticReminder': { 'sms': true,email:'false' } ]

我无法理解我已尝试过拼接方法,但它无法正常工作。请给出一些提示

3 个答案:

答案 0 :(得分:0)

可能不需要转换数据,您可能只是获得新结果。 也许这样的事情对你有帮助。



var input = [ { '0': { notify_item: '1' } },
        { '1': { notify_item: '2' } },
        { '2': { notify_item: '3' } } ];
    
    
    var keyMap = {'0': 'Invoice', '1': 'ManualReminder', '2': 'AutomaticReminder'};
    
    var result = Object.keys(input).map(function (key) { 
        var item = {},
            value = input[key]; //{notify_item:'1'} for first iteration
    
        //do your logic to convert {notify_item: '1' | '2' | '3'} 
        item[keyMap[key]] = ''; //to whatever you need
        
        return item;
    });
    
    console.log(result);




答案 1 :(得分:0)

这是map的工作。

它也比它应该更难,因为你的数据结构很奇怪。像{ notification_type: 0, notify_item: 1 }这样的东西不会更容易使用吗?

答案 2 :(得分:0)

使用Array.map函数迭代数组。在map函数中,您可以使用switch语句匹配适当的值并返回所需的输出。



var arr = [{
    '0': { notify_item: '1' }
  },
  { 
    '1': { notify_item: '2' } 
  },
  { 
    '2': { notify_item: '3' } 
  }];
  
var modifiedArr = arr.map(function(item) {
  var newItem = {};
  for ( var key in item) {
    var newItemKey = getKey(key);
    var newItemValue = getValue(item[key]);
  }
  newItem[newItemKey] = newItemValue;
  return newItem;
});

console.log(modifiedArr);

function getKey (key) {
  switch(key) {
    case '0':
      return 'Invoice';
    case '1':
      return 'ManualReminder';
    case '2':
      return 'AutomaticReminder';
    default:
      return 'default';
  }
}

function getValue (value) {
  switch(value.notify_item) {
    case '1':
      return { 'sms': true,email:'false' };
    case '2':
      return { 'sms': true,email:'false' };
    case '3':
      return { 'sms': true,email:'false' };
    default:
      return 'default';
  }
}

[ { 'Invoice': { 'sms': true,email:'false' } },
  { 'ManualReminder': { 'sms': true,email:'false' },
  { 'AutomaticReminder': { 'sms': true,email:'false' } ]