将对象的属性转换为逗号分隔的列表?
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
有了这个``标记和$美元符号你会得到结果。
【讨论】:
请添加一些解释。不仅仅是代码以上是关于将对象的属性转换为逗号分隔的列表?的主要内容,如果未能解决你的问题,请参考以下文章