具有修改的对象的对象数组

时间:2018-05-19 01:36:21

标签: javascript arrays object ecmascript-6

您好,

问题:我怎样才能改变这一点:

 console.log(prepararCoordenadas([
    { "nome": "Salvador",       "coordenadas": ["-23.6821604","-46.8754915"]},
    { "nome": "Brasília",  "coordenadas": ["-22.9137531","-73.5860657"]},
    { "nome": "Recife",          "coordenadas": [ "-8.0462741","-35.0000824"]}
  ]));

就此?

{ 
  '0':
   { nome: 'Salvador',
     coordenadas: [-46.8755, -23.6822 ] },
  '1':
   { nome: 'Brasília',
     coordenadas: [-73.5861, -22.9137] },
  '2': { nome: 'Recife', 
          coordenadas: [-35.0001, -8.0463] }
}

两个结果之间的差异。

第一
- 是一个对象数组 - 拥有城市名称和一系列“coordenadas”,如字符串。

第二
- 是一个完整的对象 - 拥有城市的名称(与第一个相同)和一系列“coordenadas”,如十进制,后面有4个数字; - 纬度和经度已更改 - 位置 - 第一个经度;

语言: Javascript

我尝试使用** Object.assign **,但缺少“coordenadas”的更改。

function prepararCoordenadas(array){

    let obj = Object.assign({},array);

    return obj;
  }

  // Test
  console.log(prepararCoordenadas([
    { "nome": "Salvador",       "coordenadas": ["-23.6821604","-46.8754915"]},
    { "nome": "Brasília",  "coordenadas": ["-22.9137531","-73.5860657"]},
    { "nome": "Recife",          "coordenadas": [ "-8.0462741","-35.0000824"]}
  ]));

任何人都可以帮助解决这个拼图功能吗?

3 个答案:

答案 0 :(得分:0)

function prepararCoordenadas(array){
    let objs = {...array}; //es6 spread operator
    for (index in objs) { //for each object in objs
        objs[index].coordenadas.forEach(coordenada => Number(coordenada)); //for each coordenada in coordenadas array, convert type to number
    }
    return objs;
  }

在这种情况下,es6扩展运算符实际上与object.assign()完全相同,但是,它具有更简单的语法。

我认为会产生预期的结果,如果您有任何疑问,请随时提出。

答案 1 :(得分:0)

你可以reduce进入一个对象并在每次迭代时转换coordenadas



const strToFixed4 = str => Number(str).toFixed(4);
const prepararCoordenadas = (array) => array.reduce(
  (accum, { nome, coordenadas: [lat, lng] }, i) => (
    {
      ...accum,
      [i]: { nome, coordenadas: [strToFixed4(lng), strToFixed4(lat)] }
    }),
  {}
);

console.log(prepararCoordenadas([
  { "nome": "Salvador",       "coordenadas": ["-23.6821604","-46.8754915"]},
  { "nome": "Brasília",  "coordenadas": ["-22.9137531","-73.5860657"]},
  { "nome": "Recife",          "coordenadas": [ "-8.0462741","-35.0000824"]}
]));




答案 2 :(得分:0)

最后的回答伙计们!谢谢你们两个!



const prepararCoordenadas = (array) => array.reduce(
  (accum, { nome, coordenadas: [lat, lng] }, i) => (
    {
      ...accum,
      [i]: { nome, coordenadas: [Number(parseFloat(lng).toFixed(4)), Number(parseFloat(lat).toFixed(4))] }
    }),
  {}
);

console.log(prepararCoordenadas([
  { "nome": "São Paulo",       "coordenadas": ["-23.6821604","-46.8754915"]},
  { "nome": "Rio de Janeiro",  "coordenadas": ["-22.9137531","-73.5860657"]},
  { "nome": "Recife",          "coordenadas": [ "-8.0462741","-35.0000824"]}
]));