给出的是响应数据的以下数据结构...
const res = {
data: [{
name: 'c2',
ipaddr: '192.168.1.5',
port: 4435,
sshuser: "abc",
sshpass: "xyz",
sshport: 22,
license: 'license.txt',
}],
};
我想将其转换为
const newState = [{
name: 'c2',
ipaddr: '192.168.1.5',
port: 4435,
}, {
sshuser: "abc",
sshpass: "xyz",
sshport: 22,
}, {
license: 'license.txt',
}]
下面发布的代码确实达到了预期的结果...
var obj1 = {
name: res.data[0].name,
ipaddr: res.data[0].ipaddr,
port: res.data[0].port,
};
var obj2 = {
sshuser: res.data[0].sshuser,
sshpass: res.data[0].sshpass,
sshport: res.data[0].sshport,
};
var obj3 = {
license: res.data[0].license,
};
const newState = [obj1, obj2, obj3];
还有哪些其他方法可以实现相同的结果(也许使用更短的语法)?
OP示例代码的结果的实现方式没有任何问题。
围绕对象解构构建的解决方案可能看起来类似于下面的代码......
const {
name, ipaddr, port,
sshuser, sshpass, sshport,
license,
} = res.data[0];
const newState = [
{ name, ipaddr, port },
{ sshuser, sshpass, sshport },
{ license },
];
console.log('newState ...', newState);
.as-console-wrapper { min-height: 100%!important; top: 0; }
<script>
const res = {
data: [{
name: 'c2',
ipaddr: '192.168.1.5',
port: 4435,
sshuser: "abc",
sshpass: "xyz",
sshport: 22,
license: 'license.txt',
}],
};
</script>
虽然您的代码工作正常并且是实现此目的的有效方法(尽管我建议使用
const
而不是 var
),但我建议可能执行映射(如果您有多个映射,这可能很有用)原始数组中的对象,也许你可以考虑使用 .map()
而不是 .flatMap()
):
const res = {data: [ {name: 'c2', ipaddr: '192.168.1.5', port: 4435, sshuser: "abc", sshpass: "xyz", sshport: 22, license: 'license.txt'}]};
const newState = res.data.flatMap(({name, ipaddr, port, sshuser, sshpass, sshport, license}) => [
{name, ipaddr, port}, {sshuser, sshpass, sshport}, {license}
]);
console.log(newState);
或者,您可以从数组中解构对象,并使用简写属性名称创建对象数组:
const res = {data: [ {name: 'c2', ipaddr: '192.168.1.5', port: 4435, sshuser: "abc", sshpass: "xyz", sshport: 22, license: 'license.txt'}]};
const [{name, ipaddr, port, sshuser, sshpass, sshport, license}] = res.data;
const newState = [{name, ipaddr, port}, {sshuser, sshpass, sshport}, {license}];
console.log(newState);