在多个对象和键值对的数组中,将所有数字值转换为负数

In array of multiple objects and key value pairs, convert all number values to negative

let array = [ {2008: 234, 2009: 234, 2010: 234, 2011: 234, 2012: 234, Type: 'A', ID: 'A1'},
                    {2008: 237, 2009: 243, 2010: 325, 2011: 378, 2012: 375, Type: 'B', ID: 'B1'},
                    {2008: 172, 2009: 191, 2010: 290, 2011: 274, 2012: 305, Type: 'C', ID: 'C1'},
                    {2008: 569, 2009: 625, 2010: 713, 2011: 655, 2012: 704, Type: 'D', ID: 'D1'},
                    {2008: 116, 2009: 123, 2010: 160, 2011: 880, 2012: 215, Type: 'E', ID: 'E1'},
                    {2008: 626, 2009: 611, 2010: 805, 2011: 918, 2012: 104, Type: 'F', ID: 'F1'} ]

对于以下对象数组,我试图将所有数字转换为负数。我想要实现的是...

let newArray = [ {2008: -234, 2009: -234, 2010: -234, 2011: -234, 2012: -234, Type: 'A', ID: 'A1'},
                    {2008: -237, 2009: -243, 2010: -325, 2011: -378, 2012: -375, Type: 'B', ID: 'B1'},
                    {2008: -172, 2009: -191, 2010: -290, 2011: -274, 2012: -305, Type: 'C', ID: 'C1'},
                    {2008: -569, 2009: -625, 2010: -713, 2011: -655, 2012: -704, Type: 'D', ID: 'D1'},
                    {2008: -116, 2009: -123, 2010: -160, 2011: -880, 2012: -215, Type: 'E', ID: 'E1'},
                    {2008: -626, 2009: -611, 2010: -805, 2011: -918, 2012: -104, Type: 'F', ID: 'F1'} ]

我如何在不影响最后 2 key/value 对的情况下执行此操作。所以我到目前为止我坚持这个...

const newArray = array.map(( { Type, ID, ...years }) => {
        return years
    })

const newArray2 = Object.fromEntries(
        Object.entries(newArray).map(([key, value]) => [key, value * -1]))

一种方法是在迭代时检查值的类型

let array = [{ 2008: 234, 2009: 234, 2010: 234, 2011: 234, 2012: 234, Type: 'A', ID: 'A1' }, { 2008: 237, 2009: 243, 2010: 325, 2011: 378, 2012: 375, Type: 'B', ID: 'B1' }, { 2008: 172, 2009: 191, 2010: 290, 2011: 274, 2012: 305, Type: 'C', ID: 'C1' }, { 2008: 569, 2009: 625, 2010: 713, 2011: 655, 2012: 704, Type: 'D', ID: 'D1' }, { 2008: 116, 2009: 123, 2010: 160, 2011: 880, 2012: 215, Type: 'E', ID: 'E1' }, { 2008: 626, 2009: 611, 2010: 805, 2011: 918, 2012: 104, Type: 'F', ID: 'F1' }];


const result = array.map(o =>
  Object.fromEntries(Object.entries(o).map(([k, v]) => (
    typeof v === 'number' ? [k, v *= -1] : [k, v]
  )))
);

console.log(result);

我假设您想根据您提供的示例在结果中保留 non-number key/value 对(尽管您的代码显示您删除了它们)

你快到了

试试这个

let array = [ {2008: 234, 2009: 234, 2010: 234, 2011: 234, 2012: 234, Type: 'A', ID: 'A1'},
                    {2008: 237, 2009: 243, 2010: 325, 2011: 378, 2012: 375, Type: 'B', ID: 'B1'},
                    {2008: 172, 2009: 191, 2010: 290, 2011: 274, 2012: 305, Type: 'C', ID: 'C1'},
                    {2008: 569, 2009: 625, 2010: 713, 2011: 655, 2012: 704, Type: 'D', ID: 'D1'},
                    {2008: 116, 2009: 123, 2010: 160, 2011: 880, 2012: 215, Type: 'E', ID: 'E1'},
                    {2008: 626, 2009: 611, 2010: 805, 2011: 918, 2012: 104, Type: 'F', ID: 'F1'} ]

const result = array.map(({
    Type,
    ID,
    ...years
  }) => ({Type, ID, ...Object.fromEntries(Object.entries(years).map(([k, n]) => [k, -n]))})

)

console.log(result)