如何在Javascript中将值保存到数组中保持旧值不变?

时间:2017-03-31 15:03:51

标签: javascript arrays

Google可视化API需要这样的数组:

chmod +x -R /home/username/Android/Sdk

我有单独的列数组

var data = google.visualization.arrayToDataTable([
         ['Element', 'Density', { role: 'style' }],
         ['Copper', 8.94, '#b87333'],            // RGB value
         ['Copper', 10.49, 'silver'],            // English color name
         ['Gold', 19.30, 'gold'],
         ['Gold', 21.45, 'color: #e5e4e2' ], // CSS-style declaration
      ]);

表示值

var columns = ['Copper', 'Copper', 'Gold', 'Gold'];

和颜色

var values = [8.94, 10.49, 19.30, 21.45];

我是否真的需要编写具有多个条件的多级循环来构建此数组?或者有更简单的方法?

我不能var styles = ['#b87333', 'silver', 'gold', 'color: #e5e4e2']; 因为数组应该是完整的。

4 个答案:

答案 0 :(得分:6)

使用Array#map

var columns = ['Copper', 'Copper', 'Gold', 'Gold'],
    values = [8.94, 10.49, 19.30, 21.45],
    styles = ['#b87333', 'silver', 'gold', 'color: #e5e4e2'],
    res = columns.map((v,i) => [v, values[i], styles[i]]),
    result = [['Element', 'Density', { role: 'style' }], ...res];
    console.log(result);

答案 1 :(得分:2)

您可以将它们映射在一起,这是一个有效的fiddle

var columns = ['Copper', 'Copper', 'Gold', 'Gold'];
var values = [8.94, 10.49, 19.30, 21.45];
var styles = ['#b87333', 'silver', 'gold', 'color: #e5e4e2'];

var newArr = columns.map((item, index) => {return [columns[index], values[index], styles[index]]})

console.log(newArr) //=> ['Copper', 8.94, '#b87333'],
                    //['Copper', 10.49, 'silver'],
                    //['Gold', 19.30, 'gold'],
                    //['Gold', 21.45, 'color: #e5e4e2' ],

答案 2 :(得分:1)

听起来你只需要不可变地复制数组,然后用它做任何你想做的事情。试试这个:

// ES6
var myArr = [1, 2, 3]
var newArr = [ ...myArr ]

// ES5
var myArr = [1, 2, 3];
var newArr = [].concat(myArr);

答案 3 :(得分:1)

使用reduce函数的ES6解决方案

var columns = ['Copper', 'Copper', 'Gold', 'Gold'];
var values = [8.94, 10.49, 19.30, 21.45];
var styles = ['#b87333', 'silver', 'gold', 'color: #e5e4e2'];

// Reduce all arrays to one vlaue
var result  = columns.reduce((acc, init, i) => {
    acc.push([init, values[i], styles[i]])
    return acc
}, [])


var out = [
         ['Element', 'Density', { role: 'style' }],
         ...result
      ]

console.log(out)