将 CSV 转换为对象

时间:2021-02-03 21:45:14

标签: javascript csv javascript-objects

考虑以下包含 csv 格式的国家及其首都的字符串。

let str = `
"country","capital"
"Afghanistan","Kabul"
"Argentina","Buenos Aires"
"Australia","Canberra"
"Austria","Vienna"
"Bangladesh","Dhaka"
"Barbados","Bridgetown"
"Bhutan","Thimphu"
"Brazil","Brasília"
"Canada","Ottawa"
"China","Beijing"
"Denmark","Copenhagen"
"Egypt","Cairo"
"Finland","Helsinki"
"France","Paris"
"Germany","Berlin"
"Greece","Athens"
"India","New Delhi"
"Indonesia","Jakarta"
"Iran","Tehran"
"Iraq","Baghdad"
"Ireland","Dublin"
"Israel","Jerusalem"
"Italy","Rome"
"Japan","Tokyo"

`

如何编写一个函数,将这个字符串作为输入参数并返回一个对象,其中键是国家,值是相应的大写。 输出应类似于:

{
  "Afghanistan": "Kabul",
  "Argentina": "Buenos Aires"
  etc...
}

3 个答案:

答案 0 :(得分:0)

众多解决方案之一:

let countries = {};
str.match(/".+?"/g).forEach(function(word, index, words) {
    if ((index > 1) && (index % 2 === 0)) {
    countries[word] = words[index+1];
  }
});
console.log(countries);

答案 1 :(得分:0)

试试看:

let str = `
"country","capital"
"Afghanistan","Kabul"
"Argentina","Buenos Aires"
"Australia","Canberra"
"Austria","Vienna"
"Bangladesh","Dhaka"
"Barbados","Bridgetown"
"Bhutan","Thimphu"
"Brazil","Brasília"
"Canada","Ottawa"
"China","Beijing"
"Denmark","Copenhagen"
"Egypt","Cairo"
"Finland","Helsinki"
"France","Paris"
"Germany","Berlin"
"Greece","Athens"
"India","New Delhi"
"Indonesia","Jakarta"
"Iran","Tehran"
"Iraq","Baghdad"
"Ireland","Dublin"
"Israel","Jerusalem"
"Italy","Rome"
"Japan","Tokyo"

`;

let res = {}
str.split("\n")
.filter(item => item)
.forEach((item, index) => {
    if(index == 0) return;

    let line = item.split(",")
    res[line[0].slice(1,-1)] = line[1].slice(1,-1)
});

console.log(res);

答案 2 :(得分:0)

另一个使用传统方法的例子。

注意这个实际上考虑了标题。

  1. 在每一行拆分
  2. 删除标题
  3. 用逗号分隔每一行
  4. 使用数组[0]作为键,使用数组[1]作为值

let str = `"country","capital"
"Afghanistan","Kabul"
"Argentina","Buenos Aires"
"Australia","Canberra"
"Austria","Vienna"
"Bangladesh","Dhaka"
"Barbados","Bridgetown"
"Bhutan","Thimphu"
"Brazil","Brasília"
"Canada","Ottawa"
"China","Beijing"
"Denmark","Copenhagen"
"Egypt","Cairo"
"Finland","Helsinki"
"France","Paris"
"Germany","Berlin"
"Greece","Athens"
"India","New Delhi"
"Indonesia","Jakarta"
"Iran","Tehran"
"Iraq","Baghdad"
"Ireland","Dublin"
"Israel","Jerusalem"
"Italy","Rome"
"Japan","Tokyo"`;

const out = {};
str.replace(/"/g,'')
       .split("\n") // each line
       .slice(1) // remove header
       .map(d=>{let a = d.split(','); out[a[0]] = a[1];}); //extract
console.log(out);

相关问题