Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
转换javascript对象列表_Javascript_Arrays_Json_Object_Javascript Objects - Fatal编程技术网

转换javascript对象列表

转换javascript对象列表,javascript,arrays,json,object,javascript-objects,Javascript,Arrays,Json,Object,Javascript Objects,我需要转换这些数据: var data = [ {a : "fin", year: 1996, value: 1}, {a : "fin", year: 1997, value: 2}, {a : "fin", year: 1998, value: 3}, {a : "fin", year: 1999, value: 4}, {a : "swe", year: 1996, value: 5}, {a : "swe", year: 1997, value: 6}, {a : "swe

我需要转换这些数据:

var data = [
 {a : "fin", year: 1996, value: 1},
 {a : "fin", year: 1997, value: 2},
 {a : "fin", year: 1998, value: 3},
 {a : "fin", year: 1999, value: 4},
 {a : "swe", year: 1996, value: 5},
 {a : "swe", year: 1997, value: 6},
 {a : "swe", year: 1998, value: 7},
 {a : "swe", year: 1999, value: 8}
]
为此:

var data = [
 {a : "fin", years: [1996,1997,1998,1999], values: [1,2,3,4]},
 {a : "swe", years: [1996,1997,1998,1999], values: [5,6,7,8]}
]
谢谢你的帮助

使用.filter()方法我们首先检查相关国家是否在“结果”数组中已经有一个对象,如果没有,我们推送一个格式化的对象,如果已经存在,我们使用.find()方法查找对象,并将年份和值推送到对象中的年份和值数组中

let result = [];

data.forEach(element => {
    if (result.filter(obj => obj.a === element.a).length < 1) {
        result.push({a : element.a, years: [element.year], values: [element.value]})
    } else {
        result.find(country => country.a === element.a).years.push(element.year)
        result.find(country => country.a === element.a).values.push(element.value)
    }
})

console.log(result);
let result=[];
data.forEach(元素=>{
if(result.filter(obj=>obj.a==element.a).length<1){
push({a:element.a,years:[element.year],values:[element.value]})
}否则{
result.find(country=>country.a==element.a).years.push(element.year)
result.find(country=>country.a==element.a).values.push(element.value)
}
})
控制台日志(结果);
使用.filter()方法我们首先检查相关国家是否在“结果”数组中已经有一个对象,如果没有,我们推送一个格式化的对象,如果已经存在,我们使用.find()方法查找对象,并将年份和值推送到对象中的年份和值数组中

let result = [];

data.forEach(element => {
    if (result.filter(obj => obj.a === element.a).length < 1) {
        result.push({a : element.a, years: [element.year], values: [element.value]})
    } else {
        result.find(country => country.a === element.a).years.push(element.year)
        result.find(country => country.a === element.a).values.push(element.value)
    }
})

console.log(result);
let result=[];
data.forEach(元素=>{
if(result.filter(obj=>obj.a==element.a).length<1){
push({a:element.a,years:[element.year],values:[element.value]})
}否则{
result.find(country=>country.a==element.a).years.push(element.year)
result.find(country=>country.a==element.a).values.push(element.value)
}
})
控制台日志(结果);

没有那么漂亮,但你会想到:

var data = [
 {a : "fin", year: 1996, value: 1},
 {a : "fin", year: 1997, value: 2},
 {a : "fin", year: 1998, value: 3},
 {a : "fin", year: 1999, value: 4},
 {a : "swe", year: 1996, value: 5},
 {a : "swe", year: 1997, value: 6},
 {a : "swe", year: 1998, value: 7},
 {a : "swe", year: 1999, value: 8}
]

var results = [];
data.forEach((item, i) => {
  let exitingIndex = getPosition(item.a);

  if (exitingIndex !== undefined) {
    results[exitingIndex].year.push(item.year)
    results[exitingIndex].value.push(item.value)
  } else {
    results.push({
      a: item.a,
      year: [item.year],
      value: [item.value]
    });
  }
})

function getPosition(value) {
  let res;
  results.forEach((item, index) => {
      if (item.a === value) {
        res = index;
        return;
      }
  })

  return res;
}

console.log(results);

不是很漂亮,但你会想到:

var data = [
 {a : "fin", year: 1996, value: 1},
 {a : "fin", year: 1997, value: 2},
 {a : "fin", year: 1998, value: 3},
 {a : "fin", year: 1999, value: 4},
 {a : "swe", year: 1996, value: 5},
 {a : "swe", year: 1997, value: 6},
 {a : "swe", year: 1998, value: 7},
 {a : "swe", year: 1999, value: 8}
]

var results = [];
data.forEach((item, i) => {
  let exitingIndex = getPosition(item.a);

  if (exitingIndex !== undefined) {
    results[exitingIndex].year.push(item.year)
    results[exitingIndex].value.push(item.value)
  } else {
    results.push({
      a: item.a,
      year: [item.year],
      value: [item.value]
    });
  }
})

function getPosition(value) {
  let res;
  results.forEach((item, index) => {
      if (item.a === value) {
        res = index;
        return;
      }
  })

  return res;
}

console.log(results);

检查这是否有效

    let data = [
    { a: "fin", year: 1996, value: 1 },
    { a: "fin", year: 1997, value: 2 },
    { a: "fin", year: 1998, value: 3 },
    { a: "fin", year: 1999, value: 4 },
    { a: "swe", year: 1996, value: 5 },
    { a: "swe", year: 1997, value: 6 },
    { a: "swe", year: 1998, value: 7 },
    { a: "swe", year: 1999, value: 8 }
]
let groupByCountries = {};
data.forEach(country => {
    if (!groupByCountries.hasOwnProperty(country.a)) {
        groupByCountries[country.a] = {
            years: [country.year],
            values: [country.value]
        }
    }
    else {
        groupByCountries[country.a].years.push(country.year);
        groupByCountries[country.a].values.push(country.value);
    }
})

let combinedValues = []
Object.keys(groupByCountries).forEach(country => {
    combinedValues.push({
        a: country,
        years: groupByCountries[country].years,
        values: groupByCountries[country].values
    })
})

//just for printing
combinedValues.forEach((country) => {
    console.log(country)
})



let data = [
    { a: "fin", year: 1996, value: 1 },
    { a: "fin", year: 1997, value: 2 },
    { a: "fin", year: 1998, value: 3 },
    { a: "fin", year: 1999, value: 4 },
    { a: "swe", year: 1996, value: 5 },
    { a: "swe", year: 1997, value: 6 },
    { a: "swe", year: 1998, value: 7 },
    { a: "swe", year: 1999, value: 8 }
]
let groupByCountries = {};
data.forEach(country => {
    if (!groupByCountries.hasOwnProperty(country.a)) {
        groupByCountries[country.a] = {
            years: [country.year],
            values: [country.value]
        }
    }
    else {
        groupByCountries[country.a].years.push(country.year);
        groupByCountries[country.a].values.push(country.value);
    }
})

let combinedValues = []
Object.keys(groupByCountries).forEach(country => {
    combinedValues.push({
        a: country,
        years: groupByCountries[country].years,
        values: groupByCountries[country].values
    })
})

//just for printing
combinedValues.forEach((country) => {
    console.log(country)
})

检查这是否有效

    let data = [
    { a: "fin", year: 1996, value: 1 },
    { a: "fin", year: 1997, value: 2 },
    { a: "fin", year: 1998, value: 3 },
    { a: "fin", year: 1999, value: 4 },
    { a: "swe", year: 1996, value: 5 },
    { a: "swe", year: 1997, value: 6 },
    { a: "swe", year: 1998, value: 7 },
    { a: "swe", year: 1999, value: 8 }
]
let groupByCountries = {};
data.forEach(country => {
    if (!groupByCountries.hasOwnProperty(country.a)) {
        groupByCountries[country.a] = {
            years: [country.year],
            values: [country.value]
        }
    }
    else {
        groupByCountries[country.a].years.push(country.year);
        groupByCountries[country.a].values.push(country.value);
    }
})

let combinedValues = []
Object.keys(groupByCountries).forEach(country => {
    combinedValues.push({
        a: country,
        years: groupByCountries[country].years,
        values: groupByCountries[country].values
    })
})

//just for printing
combinedValues.forEach((country) => {
    console.log(country)
})



let data = [
    { a: "fin", year: 1996, value: 1 },
    { a: "fin", year: 1997, value: 2 },
    { a: "fin", year: 1998, value: 3 },
    { a: "fin", year: 1999, value: 4 },
    { a: "swe", year: 1996, value: 5 },
    { a: "swe", year: 1997, value: 6 },
    { a: "swe", year: 1998, value: 7 },
    { a: "swe", year: 1999, value: 8 }
]
let groupByCountries = {};
data.forEach(country => {
    if (!groupByCountries.hasOwnProperty(country.a)) {
        groupByCountries[country.a] = {
            years: [country.year],
            values: [country.value]
        }
    }
    else {
        groupByCountries[country.a].years.push(country.year);
        groupByCountries[country.a].values.push(country.value);
    }
})

let combinedValues = []
Object.keys(groupByCountries).forEach(country => {
    combinedValues.push({
        a: country,
        years: groupByCountries[country].years,
        values: groupByCountries[country].values
    })
})

//just for printing
combinedValues.forEach((country) => {
    console.log(country)
})

我在实际问题中有多个国家。@vinkki我已更新解决方案,以便与任意数量的国家一起动态地将对象添加到结果数组中。我在实际问题中有多个国家。@vinkki我已更新解决方案,以便与任意数量的国家一起动态地将对象添加到结果数组中。这很好,非常感谢你的帮助。如果您找到更好的解决方案,请告诉我。:)对于lodash,它应该是一行,但我不知道在您的情况下是否值得为此添加一个库。这很有效,非常感谢您的帮助。如果您找到更好的解决方案,请告诉我。:)对于lodash,它应该是一行,但我不知道在您的情况下是否值得为此添加一个库。