我想实现这个目标:
var keys = ['name', 'description']
var obj = {
id: 1,
name: 'Test',
description: 'Lorem ipsum dolores',
moreKeysHere: 'moreValues'
}
console.log(obsKeysToString(obj, keys, '-'))
Run Code Online (Sandbox Code Playgroud)
结果: Test - Lorem ipsum dolores
我有一些for循环解决方案,以及一些搅拌操作等等,但我相信有更好的方法..
显示 1-liners for join 的另一个答案keys, or values, or both:
加入键: Object.keys(obj)
const
obj = {a: '1', b: '2'},
joined = Object.keys(obj).join(',');
Run Code Online (Sandbox Code Playgroud)
加盟价值观: Object.values(obj)
const
obj = {a: '1', b: '2'},
joined = Object.values(obj).join(',');
Run Code Online (Sandbox Code Playgroud)
加入两者: Object.entries(obj)
const
obj = {a: '1', b: '2'},
joined = Object.entries(obj).join(',');
Run Code Online (Sandbox Code Playgroud)
注意:Object.entries(obj)ecma 于 2017 年 6 月宣布了一项标准(见链接)。浏览器支持:除 IE Desktop 和 Mobile Safari 之外的所有浏览器。
您可以使用Array#map方法和Array#join方法.where Array#filter方法可用于过滤非空和已定义的属性值.
function obsKeysToString(o, k, sep) {
// iterate over key array
return k.map(function(key) {
// get object property value
return o[key];
// filter out non-empty and defined property
}).filter(function(v) {
return v;
// join the property value array with the separator
}).join(sep);
}
Run Code Online (Sandbox Code Playgroud)
var keys = ['name', 'description']
var obj = {
id: 1,
name: 'Test',
description: 'Lorem ipsum dolores',
moreKeysHere: 'moreValues'
}
function obsKeysToString(o, k, sep) {
return k.map(function(key) {
return o[key];
}).filter(function(v) {
return v;
}).join(sep);
}
console.log(obsKeysToString(obj, keys, '-'))Run Code Online (Sandbox Code Playgroud)
与ES6箭头功能相同的解决方案
function obsKeysToString(o, k, sep) {
return k.map(key => o[key]).filter(v => v).join(sep);
}
Run Code Online (Sandbox Code Playgroud)
var keys = ['name', 'description']
var obj = {
id: 1,
name: 'Test',
description: 'Lorem ipsum dolores',
moreKeysHere: 'moreValues'
}
function obsKeysToString(o, k, sep) {
return k.map(key => o[key]).filter(v => v).join(sep);
}
console.log(obsKeysToString(obj, keys, '-'))Run Code Online (Sandbox Code Playgroud)
使用Array#reduce方法的另一种方法
function obsKeysToString(o, k, sep) {
// iterate over key array
return k.reduce(function(str, key) {
// generate string based on each key
return str + (o.hasOwnProperty(key) ? (str.length ? sep : '') + o[key] : '');
}, '')
}
Run Code Online (Sandbox Code Playgroud)
var keys = ['name', 'description']
var obj = {
id: 1,
name: 'Test',
description: 'Lorem ipsum dolores',
moreKeysHere: 'moreValues'
}
function obsKeysToString(o, k, sep) {
return k.reduce(function(str, key) {
return str + (o.hasOwnProperty(key) ? (str.length ? sep : '') + o[key] : '');
}, '')
}
console.log(obsKeysToString(obj, keys, '-'))Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4904 次 |
| 最近记录: |