使用分隔符将对象键值组合为单个字符串

Pri*_*ome 4 javascript

我想实现这个目标:

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循环解决方案,以及一些搅拌操作等等,但我相信有更好的方法..

Ada*_*isa 8

显示 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 之外的所有浏览器。

在此处输入图片说明


Pra*_*lan 7

您可以使用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)