对象数组填充具有特定匹配项的新对象数组

时间:2018-03-22 12:13:56

标签: javascript

如何将对象数组(])中的对象属性添加到另一个数组(inputArray)。

output
var inputArray = [ { subject: 'Maths', integervalue: '40', booleanvalue: null }, { subject: 'Science', integervalue: '50', booleanvalue: null }, { subject: 'Chemi', integervalue: '35', booleanvalue: null }, { subject: 'Stats', integervalue: null, booleanvalue: true }, { subject: 'Other', integervalue: null, booleanvalue: false }, { subject: 'History', integervalue: null, booleanvalue: true }, ]; 属性与每个对象匹配时,应添加

output

如果匹配位于subject,则'Chemi'应该等于output.suba integerValue inputArray subject的{​​{1}}属性。< / p>

Ergo,将设置为

的值
'Chemi'

如果inputArray[2].integervalue. 为空,则应将其设置为integerValue的{​​{1}}属性。

所以booleanValue看起来像这样:

inputArray

提前致谢。

4 个答案:

答案 0 :(得分:1)

您可以使用array#map生成新字符串的对象数组。然后使用Object.assign(),您可以使用所有键值创建一个新对象。

&#13;
&#13;
var inputArray = [ { subject: 'Maths', integervalue: '40', booleanvalue: null }, { subject: 'Science', integervalue: '50', booleanvalue: null }, { subject: 'Chemi', integervalue: '35', booleanvalue: null }, { subject: 'Stats', integervalue: null, booleanvalue: true }, { subject: 'Other', integervalue: null, booleanvalue: false }, { subject: 'History', integervalue: null, booleanvalue: true }],
    output = Object.assign(...inputArray.map(({subject,integervalue, booleanvalue}) => ({[subject]:integervalue || booleanvalue})));
console.log(output);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

&#13;
&#13;
    var inputArray = [
     { subject: 'Maths', integervalue: '40', booleanvalue: null },
     { subject: 'Science', integervalue: '50', booleanvalue: null },
     { subject: 'Chemi', integervalue: '35', booleanvalue: null },
     { subject: 'Stats', integervalue: null, booleanvalue: true },
     { subject: 'Other', integervalue:  null, booleanvalue: false },
     { subject: 'History', integervalue: null, booleanvalue: true },
    ];
    
        
    var myOutput = inputArray.reduce( function(output, currentValue) {
          output[currentValue.subject] = currentValue.integervalue || currentValue.booleanvalue;
          return output
        }, {});

console.log(myOutput);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

使用数字索引而非字母索引的解决方案,如果你需要字母索引,我可以改善这一点。

const output = inputArray.reduce( ( _output, e, _index ) => {
  const query = `WHERE subject is = ${e.subject} set ${e.integervalue || e.booleanvalue}`

  _output[ `sub${_index}` ] = query;
  return _output;
}, {} )

enter image description here

答案 3 :(得分:0)

Hendry的解决方案可以修改为字母索引如下:

const output = inputArray.reduce( ( _output, e, _index ) => {
  const query = `WHERE subject is = ${e.subject} set ${e.integervalue || e.booleanvalue}`
  const charIndex = String.fromCharCode(97 + _index);

  _output[ `sub${charIndex }` ] = query;
  return _output;
}, {} )