遍历对象并将其推入新的数组JavaScript

时间:2020-07-17 20:58:07

标签: javascript arrays typescript

我想问一下该算法的JavaScript代码,假设我有一个汽车对象:

var cars = {
  'civic' : {
    'color' : 'blue',
    'year' : '2020'
  },
  'supra' : {
    'color' : 'red',
    'year' : '2019'
  },
  'impala' : {
    'color' : 'black',
    'year' : '1967'
  },
  'fake_civic' : {
    'color' : 'blue',
    'year' : '2020'
  },
  'fake_supra' : {
    'color' : 'red',
    'year' : '2019'
  },
  'fake_impala' : {
    'color' : 'black',
    'year' : '1967'
  },
}

并且我想将伪造的东西提取到对象数组中,这样看起来像这样

fakeCars = [
  {'fake_civic' : {
    'color' : 'blue',
    'year' : '2020'
    }
  },
  {'fake_supra' : {
    'color' : 'red',
    'year' : '2019'
    }
  },
  {'fake_impala' : {
    'color' : 'black',
    'year' : '1967'
    }
  },
];

我已经尝试过

fakeCars = Object.entries(cars).map((e) => ( { [e[0]]: e[1] } ));

但是它返回整个汽车对象的数组,我不知道如何搜索假冒的对象,我该如何解决呢?谢谢。

2 个答案:

答案 0 :(得分:5)

为此,我将.filter()用于:

var cars = { 'civic' : { 'color' : 'blue', 'year' : '2020' }, 'supra' : { 'color' : 'red',  'year' : '2019'  }, 'impala' : {   'color' : 'black',        'year' : '1967'  },  'fake_civic' : {  'color' : 'blue',  'year' : '2020'      },      'fake_supra' : { 'color' : 'red',    'year' : '2019'  }, 'fake_impala' : { 'color' : 'black',  'year' : '1967' },  }

const result = Object.entries(cars)
                     .filter(e => e[0].includes('fake'));

console.log(result);

答案 1 :(得分:0)

const cars = {
  'civic' : {
    'color' : 'blue',
    'year' : '2020'
  },
  'supra' : {
    'color' : 'red',
    'year' : '2019'
  },
  'impala' : {
    'color' : 'black',
    'year' : '1967'
  },
  'fake_civic' : {
    'color' : 'blue',
    'year' : '2020'
  },
  'fake_supra' : {
    'color' : 'red',
    'year' : '2019'
  },
  'fake_impala' : {
    'color' : 'black',
    'year' : '1967'
  },
}

const fakeCars = Object.keys(cars).reduce((acc, rec) => {
  return (rec.indexOf('fake') > -1) ? [...acc, { [rec]: cars[rec] }] : acc
}, [])

console.log(fakeCars)