【问题标题】:Turn properties of object into a comma-separated list?将对象的属性转换为逗号分隔的列表?
【发布时间】:2014-12-31 03:57:15
【问题描述】:

我有一个这样的对象:

var person = {
  name: "John",
  surname: "Smith",
  phone: "253 689 4555"
}

我想要:

John,Smith,253 689 4555

有什么简单的方法吗?

如果可能,您能否提供一个我也可以定义分隔符的示例?

【问题讨论】:

标签: javascript csv


【解决方案1】:

您可以在现代浏览器中使用这种单线器

Object.keys(person).map(function(k){return person[k]}).join(",");

【讨论】:

  • 是的,直到你为 Object.keys 和 Array.map 添加 polyfills :/
  • 我可以确定列表顺序吗?
  • 太好了,非常感谢!只是一个提示,很好的答案解释了原因并提供了文档链接:) 不管怎样,++1
  • 这已经相当老了,但是干吗:Object.values(person).join(',')
  • 我们如何维护价值顺序?
【解决方案2】:

当您想从对象数组中提取一些属性值作为逗号分隔的字符串时,此代码将很有用。

    var arrayObjects = [
  {
    property1: "A",
    property2: "1"
  },
  {
    property1: "B",
    property2: "2"
  },
  {
    property1: "C",
    property2: "3"
  }
];

Array.prototype.map.call(arrayObjects, function(item) { return item.property1; }).join(",");

输出 - “A,B,C”

【讨论】:

  • 亲爱的 Sachin 能否解释一下这行代码 Array.prototype.map.call(arrayObjects, function(item) { return item.property1; }).join(",");跨度>
  • @Sachin Gaur 我到底想要什么 非常感谢。
  • 我不熟悉 Javascript,但arrayObjects.map(x => x.property1).join(",") 似乎返回了相同的结果。
【解决方案3】:

这是一个更简单的单行。它使用 Object.values() 方法而不是 Object.keys

Object.values(obj).join(",");

【讨论】:

  • ++ for one-liner
【解决方案4】:

这样写一个函数:

function toCSV(obj, separator) {
    var arr = [];

    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            arr.push(obj[key]);
        }
    }

    return arr.join(separator || ",");
}

然后你可以这样称呼它:

toCSV(person, "|"); // returns "John|Smith|253 689 4555"

toCSV(person); // returns "John,Smith,253 689 4555"

【讨论】:

    【解决方案5】:

    试试这个:

    var key,
      person = {
        name: "John",
        surname: "Smith",
        phone: "253 689 4555"
      },
      array = [];
    
    for ( key in person ) {
      if ( person.hasOwnProperty( key ) ) {
        array.push( person[ key ] );
      }
    }
    
    console.log( array.join( ',' ) );
    

    或在函数样式中:

    var
      getValues = function ( obj ) {
        var key,
          array = [];
    
        for ( key in obj ) {
          if ( obj .hasOwnProperty( key ) ) {
            array.push( obj [ key ] );
          }
        }
    
        return obj.join( ',' );
      };
    
    var person = {
          name: "John",
          surname: "Smith",
          phone: "253 689 4555"
        };
    
    console.log( getValues( person ) );
    

    【讨论】:

      【解决方案6】:
      var arr = [
          {
              key_1: "A",
              key_2: "1"
          },
          {
              key_1: "B",
              key_2: "2"
          },
          {
              key_1: "C",
              key_2: "3"
          }
      ];
      
      var CSVOf_arr = arr.map((item) => { return item.key_1 }).join(',')
      
      console.log('Comma seprated values of arr', CSVOf_arr)
      

      输出:A、B、C

      【讨论】:

      • 尽管这不是 OP 想要的,但这正是我想要的。谢谢!
      • @jbobbins 欢迎✌️ ;)
      【解决方案7】:

      您可能想试试这个库 - Underscore.js。它为您提供了非常有用的方法,并且可以跨浏览器工作。

      在这里你可以这样做-

      _.values(person).join(",")
      

      _.values(person).join("|")
      

      【讨论】:

        【解决方案8】:

        Object.values() 方法返回给定对象自己的可枚举属性值的数组。它可用于将对象属性转换为数组,然后可以使用.join(separator) 将其连接起来,以创建所需的字符串,并在连接函数中定义分隔符。但这也会导致空值被加入。所以对于一个对象

        var person = {
          name: "John",
          surname: "Smith",
          phone: ""
        }
        

        输出

        Object.values(person).join(',')
        

        将会

        约翰,史密斯,

        最后加上一个“,”。为避免这种情况,.filter() 可用于从数组中删除空元素,然后在过滤后的数组上使用连接。

        Object.values(person).filter(Boolean).join(',')
        

        会输出

        约翰,史密斯

        【讨论】:

          【解决方案9】:
          Object.values(person).join('/')
          

          【讨论】:

          • 请注意,这是 ECMAScript 2017,还没有得到很好的支持。
          【解决方案10】:

          另一种方法是使用lodash函数_.toString()

          console.log( _.toString( Object.values( person ) ) );
          ==> John,Smith,253 689 4555
          

          查看下面的链接 https://lodash.com/docs/4.17.5#toString

          【讨论】:

            【解决方案11】:
            var person = {
                name: "John",
                surname: "Smith",
                phone: "253 689 4555"
             }
            
            
            
            let personData = ${person.name},${person.surname},${person.phone}
            

            有了这个``标记和$美元符号你会得到结果。

            【讨论】:

            • 请添加一些解释。不仅仅是代码
            猜你喜欢
            • 2018-04-23
            • 2021-01-10
            • 1970-01-01
            • 1970-01-01
            • 2021-02-17
            • 2016-10-24
            • 2011-09-29
            • 1970-01-01
            • 2020-04-07
            相关资源
            最近更新 更多