将JavaScript对象属性从数组修改为字符串
我有一个JavaScript对象,其中一个属性是数组。我想修改该对象以创建一个几乎相同的对象,只是其中一个属性是字符串 看起来该方法可用于将数组更改为字符串(例如,将JavaScript对象属性从数组修改为字符串,javascript,Javascript,我有一个JavaScript对象,其中一个属性是数组。我想修改该对象以创建一个几乎相同的对象,只是其中一个属性是字符串 看起来该方法可用于将数组更改为字符串(例如,console.log(elements.join('-'))) 但是如何创建一个与旧对象相同但有一个不同属性(即字符串而不是数组)的新对象呢 例如,我有一个对象,carOriginal: { "make": "Ford", "model": "F150", "features": [ "windows",
console.log(elements.join('-'))
)
但是如何创建一个与旧对象相同但有一个不同属性(即字符串而不是数组)的新对象呢
例如,我有一个对象,carOriginal:
{
"make": "Ford",
"model": "F150",
"features": [
"windows",
"seatbelts"
]
}
。。。我想从中创建这个对象carNew:
{
"make": "Chevy",
"model": "Tahoe",
"features": "windows,seatbelts"
}
如果使用ES6,则可以分解原始功能并添加新功能值:
const数据={
“制造”:“福特”,
“型号”:“F150”,
“特点”:[
“窗口”,
“安全带”
]
}
const other={…数据,功能:data.features.join()}
console.log(其他)
如果使用ES6,您可以对原始功能进行分解并添加新功能值:
const数据={
“制造”:“福特”,
“型号”:“F150”,
“特点”:[
“窗口”,
“安全带”
]
}
const other={…数据,功能:data.features.join()}
console.log(其他)
尝试以下操作:
const obj={
“制造”:“3”,
“型号”:“2019-07-17”,
“特点”:[
“窗口”,
“安全带”
]
}
const result=Object.assign({},obj,{features:obj.features.join()});
控制台日志(结果)代码>请尝试以下操作:
const obj={
“制造”:“3”,
“型号”:“2019-07-17”,
“特点”:[
“窗口”,
“安全带”
]
}
const result=Object.assign({},obj,{features:obj.features.join()});
控制台日志(结果)代码>您可以使用在一个单独的浅表副本中收集其余的键,修改后的属性将分配给:
const carOriginal={
“制造”:“福特”,
“型号”:“F150”,
“特点”:[
“窗口”,
“安全带”
]
};
函数转换({features,…keys}){
返回{…键,功能:features.join()};
}
const carNew=变换(carOriginal);
console.log(carNew)代码>您可以使用在一个单独的浅表副本中收集其余的键,修改后的属性将分配给:
const carOriginal={
“制造”:“福特”,
“型号”:“F150”,
“特点”:[
“窗口”,
“安全带”
]
};
函数转换({features,…keys}){
返回{…键,功能:features.join()};
}
const carNew=变换(carOriginal);
console.log(carNew)代码>如果您不知道属性的名称,则必须检查每个值以查看它是否为数组:
function subJoin(obj) {
for (let prop in obj) {
if (obj.hasOwnProperty(prop)) {
if (Array.isArray(obj[prop])) {
obj[prop] = obj[prop].join(',');
}
}
}
return obj;
}
let input = {
"make": "Ford",
"model": "F150",
"features": [
"windows",
"seatbelts"
]
}
let output = subJoin(input);
console.log(output); /// --> { "make": "Chevy", "model": "Tahoe", "features": "windows,seatbelts" }
如果不知道属性的名称,则必须检查每个值,以查看它是否为数组:
function subJoin(obj) {
for (let prop in obj) {
if (obj.hasOwnProperty(prop)) {
if (Array.isArray(obj[prop])) {
obj[prop] = obj[prop].join(',');
}
}
}
return obj;
}
let input = {
"make": "Ford",
"model": "F150",
"features": [
"windows",
"seatbelts"
]
}
let output = subJoin(input);
console.log(output); /// --> { "make": "Chevy", "model": "Tahoe", "features": "windows,seatbelts" }
只是为了确认我正确理解了您的问题,您希望保留原始变量并自行创建新对象,而不仅仅是覆盖现有对象,对吗?只是为了确认我正确理解了您的问题,您希望保留原始变量并自行创建新对象,而且不仅仅覆盖现有对象,对吗?我认为直到ES2018晚些时候才添加对象扩展语法。ES2015只支持iterable spread和rest语法。我认为直到ES2018晚些时候才添加对象spread语法。ES2015仅支持iterable spread和rest语法。