我想实现这个目标:
*
结果:dateFormat: "MM-dd-yy",
$(function() {
$( "#my_date" ).datepicker({
dateFormat: "MM-dd-yy",
defaultDate: "January/01/1970",
minDate: "January/01/1925",
maxDate: "December/31/2011",
changeMonth: true,
changeYear: true,
yearRange: "1925:2011",
onClose: function(dateText, inst) {
var validDate = $.datepicker.formatDate( "MM-dd-yy",$('#my_date').datepicker('getDate'));
$('#my_date').datepicker('setDate', validDate);
}
});
});
我有一些var keys = ['name', 'description']
var obj = {
id: 1,
name: 'Test',
description: 'Lorem ipsum dolores',
moreKeysHere: 'moreValues'
}
console.log(obsKeysToString(obj, keys, '-'))
循环的解决方案,以及一些搅拌操作等等,但我相信还有更好的方法..
答案 0 :(得分:7)
您可以使用 Array#map
方法以及 Array#join
方法。其中 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);
}
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, '-'))
与ES6箭头功能相同的解决方案
function obsKeysToString(o, k, sep) {
return k.map(key => o[key]).filter(v => v).join(sep);
}
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, '-'))
使用 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] : '');
}, '')
}
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, '-'))
答案 1 :(得分:3)
var keys = ['name', 'description', 'nonExistentProperty']
var obj = {
id: 1,
name: 'Test',
description: 'Lorem ipsum dolores',
moreKeysHere: 'moreValues'
};
// ES6
console.log(keys.filter(key => typeof obj[key] !== 'undefined').map(key => obj[key]).join(','));
// NON ES6
console.log(keys.filter(function(key) { return typeof obj[key] !== 'undefined'}).map(function(key) { return obj[key]}).join(','));

答案 2 :(得分:1)
另一个答案,显示加入keys
或values
或both
的1-班轮:
加入键:Object.keys(obj)
const
obj = {a: '1', b: '2'},
joined = Object.keys(obj).join(',');
合并值:Object.values(obj)
const
obj = {a: '1', b: '2'},
joined = Object.values(obj).join(',');
同时加入:Object.entries(obj)
const
obj = {a: '1', b: '2'},
joined = Object.entries(obj).join(',');
注意:Object.entries(obj)
是ecma在2017年6月发布的标准(See link)。浏览器支持:除IE桌面和Mobile Safari之外的所有浏览器。
答案 3 :(得分:0)
使用一行代码的另一种解决方案......
var stringRep = Object.keys(obj).toString();
//stringRep = "id,name,description,moreKeysHere"
答案 4 :(得分:0)
使用Array.reduce
:
var keys = ['name', 'description']
var obj = {
id: 1,
name: 'Test',
description: 'Lorem ipsum dolores',
moreKeysHere: 'moreValues'
}
console.log (
keys.reduce (
function (strs, key) { if (obj[key]) strs.push (obj[key]);
return strs }, []).join (' - ')
);