将对象的属性转换为逗号分隔的列表?

Posted

技术标签:

【中文标题】将对象的属性转换为逗号分隔的列表?【英文标题】: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

有什么简单的方法吗?

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

【问题讨论】:

作为参考,这本质上只是getting the object values as an array 并与join 一起加入。 【参考方案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(",");跨度> 看看这个freecodecamp.org/forum/t/explain-array-prototype-map-call/… - @DEEPADHIYA @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

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

【讨论】:

请添加一些解释。不仅仅是代码

以上是关于将对象的属性转换为逗号分隔的列表?的主要内容,如果未能解决你的问题,请参考以下文章

将 csv 数据转换为逗号分隔的列表

将逗号分隔的字符串转换为列表

如何将逗号分隔的字符串转换为列表?

将结果转换为逗号分隔列表

如何将逗号分隔的字符串转换为 Python 中的列表?

将长值列表转换为逗号分隔以及每个值周围的括号