如果我有以下结构的对象:
var test = {
property1: "value1",
property2: "value2",
property3: "value3",
property4: "value4",
property5: "value5"
}
假设属性名称是固定的而不是总是按此顺序排列,那么将此对象转换为以下对象的最佳方式是什么:
var test_copy = {
prop1Copy: "value1",
propConcat: "value2, value3, value4, value5"
}
答案 0 :(得分:1)
我认为没有任何特别优雅的方法可以做到这一点。
由于您的输入数据只有少量固定键,因此使用循环几乎没有任何意义,因此可行:
function munge(o) {
return {
prop1Copy: o.property1,
propConcat: [o.property2, o.property3, o.property4, o.property5].join(', ')
}
}
答案 1 :(得分:0)
试试这个:
function concatObject(object, levels){
var currentLevel = 0;
var newObj = {propConcat: ""};
for(var prop in object){
if(currentLevel < levels){
newObj[prop] = object[prop];
}
else{
newObj["propConcat"] += object[prop];
}
}
}
concatObject(test,1)会给你答案,但它会为变量保留相同的属性名称。如果要更改实际属性名称,则需要某种映射功能(例如:从property1到prop1copy)
这会将属性#转换为属性#copy:
function concatObject(object, levels){
var currentLevel = 0;
var newObj = {propConcat: ""};
for(var prop in object){
if(currentLevel < levels){
newObj[prop+"copy"] = object[prop];
}
else{
newObj["propConcat"] += object[prop];
}
}
}
答案 2 :(得分:0)
我不确定你需要在这里完成什么。但是如果你想要复制第一个项目并连接所有其他项目,请看看这个。
function concatValues (obj) {
var resObj = {prop1Copy: ""}, count = 0, mergedArr = [];
for (var k in obj) {
count == 0 ? resObj.prop1Copy = obj[k] : mergedArr.push(obj[k]);
count++;
}
resObj.propConcat = mergedArr.join(", ");
return resObj;
}
希望这有帮助
答案 3 :(得分:0)
这是一个更通用的解决方案,适用于更广泛的输入,但有一些注意事项。
function concatenateObjectValues(obj) {
//If you want the output to be sorted differently, you need to provide your own sort order. This sorts by alphabetical order
var keys = Object.keys(test).sort();
//assuming the first property would always be the copy
//removing the first element and returning it
var copyProp = keys.unshift();
//generate an array that has the values of the remaining properties from the input
var concatProp = keys.reduce(function(memo, key) {
memo.push(test[key]);
return memo;
}, []);
//create `propConcat` and combine the values using the specified separator
var newObj = {
propConcat: concatProp.join(", ")
};
//add the `prop1Copy` property. The first part of the name would be derived from the actual first property .
newObj[copyProp + "Copy"] = obj[copyProp];
return newObj;
}
老实说,如果您的预期输出 的变化不止一件事,例如,如果您需要复制属性不同且排序顺序不同,那么它可能只是更好地废弃这个功能。如果您需要传递大部分内容来构建结果,那么预期输入/输出的大变化会使它变得有点笨拙。