将JavaScript对象属性从数组修改为字符串

将JavaScript对象属性从数组修改为字符串,javascript,Javascript,我有一个JavaScript对象,其中一个属性是数组。我想修改该对象以创建一个几乎相同的对象,只是其中一个属性是字符串 看起来该方法可用于将数组更改为字符串(例如,console.log(elements.join('-'))) 但是如何创建一个与旧对象相同但有一个不同属性(即字符串而不是数组)的新对象呢 例如,我有一个对象,carOriginal: { "make": "Ford", "model": "F150", "features": [ "windows",

我有一个JavaScript对象,其中一个属性是数组。我想修改该对象以创建一个几乎相同的对象,只是其中一个属性是字符串

看起来该方法可用于将数组更改为字符串(例如,
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语法。