用于配置的对象生成器

时间:2017-12-24 20:37:27

标签: javascript reactjs

我得到的数据是一系列对象,例如:

[
  {
    id: 0,
    config: false
  },
  {
    id: 1,
    config: false
  },
  {
    id: 2,
    config: false
  },
  {
    id: 3, 
    config: false
  }
]

我想采用这个对象并使用某种算法来配置新对象,如

[
  {
    id: 0,
    config: false
  },
  {
    id: 1,
    config: true
  },
  {
    id: 2,
    config: false
  },
  {
    id: 3, 
    config: false
  }
]

[
  {
    id: 0,
    config: false
  },
  {
    id: 1,
    config: false
  },
  {
    id: 2,
    config: true
  },
  {
    id: 3, 
    config: false
  }
]

等等......我只需要一个配置为真,其他所有配置都应该是假的。任何帮助将不胜感激我一直在撕裂我的头发。 ES6也是一种选择。

谢谢

3 个答案:

答案 0 :(得分:1)

你可以为它generator function



function* getParts(array) {
    var i = 1 << array.length;

    while (i--) {
        yield array.map((o, j) => Object.assign({}, o, { config: !(i & 1 << j) }));
    }
}

var array = [{ id: 0, config: false }, { id: 1, config: false }, { id: 2, config: false }, { id: 3, config: false }];

console.log([...getParts(array)]);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

答案 1 :(得分:0)

&#13;
&#13;
var object = [];
for (var i = 0; i < 10; i ++) {
  object [i] = {
    "id": i,
    "config": false
  };
}

// Algorithm
for (var i = 0; i < object.length; i ++) {
  var clone = makeClone (object);
  clone [i].config = true;
  console.log (clone); 		
}

function makeClone (object) {
  var tmp = [];
  for (var i = 0; i < object.length; i ++) {
    tmp [i] = {};
    var objectKeys = Object.keys (object [i]);
    for (var j = 0; j < objectKeys.length; j ++) {
      var key = objectKeys [j];
      tmp [i][key] = object [i][key];
    }
  }

  return tmp;
}
&#13;
&#13;
&#13;

答案 2 :(得分:0)

这很容易。假设你需要更改配置字段,id = 1.试试这个:

const arr = [
  {
    id: 0,
    config: false
  },
  ...
];

const newArr = arr.map(item => {
  if (item.id === 1) {
    item.config = true;
  }

  return item;
});

<强>更新 看看我的jsfiddle示例:https://jsfiddle.net/smhfanda/jwamLq01/