Javascript在对象内展开数组
另外,我尝试了一些堆栈溢出,已经回答了关于展平对象内嵌套数组的问题,这些问题在下面的问题中提到 我仍在清理阵列。我使用以下方法填充空值和空值数组:Javascript在对象内展开数组,javascript,arrays,typescript,lodash,flatten,Javascript,Arrays,Typescript,Lodash,Flatten,另外,我尝试了一些堆栈溢出,已经回答了关于展平对象内嵌套数组的问题,这些问题在下面的问题中提到 我仍在清理阵列。我使用以下方法填充空值和空值数组: if (Array.isArray(elem[prop]) || typeof(elem[prop]) === 'object') { if (elem[prop].indexOf(null) !== -1 || elem[prop].length === 0) { // console.log(elem[prop], prop)
if (Array.isArray(elem[prop]) || typeof(elem[prop]) === 'object') {
if (elem[prop].indexOf(null) !== -1 || elem[prop].length === 0) {
// console.log(elem[prop], prop)
elem[prop] = '';
}
}
假设我有以下数组:
array = [
{
id: 123,
name: 'Peter',
phone: '',
addresses:
[
{
address1: 'Manchester, UK', address2: 'London, UK'
},
{
address1: 'Liverpool, UK', address2: 'NY, USA'
}
]
},
{
id: 124,
name: 'Sara',
phone: '',
addresses: [{ address1: 'London, UK', address2: 'Paris, FR' }]
}
];
我需要展平地址数组,因此最终的数组将如下所示:
array = [
{
id: 123,
name: 'Peter',
phone: '',
addresses_address1: 'Manchester, UK',
addresses_address2: 'London, UK'
},
{
id: 124,
name: 'Sara',
phone: '',
addresses_address1: 'London, UK',
addresses_address2: 'Paris, FR'
}
];
正如您所说,用户id=123的第一个嵌套数组被添加为地址\u addres1和地址\u address2,第二个嵌套数组被删除:
{
address1: 'Liverpool, UK', address2: 'NY, USA'
}
由于命名原因,我删除其他嵌套数组的唯一原因。无论如何,我使用concat.apply尝试了以下解决方案:
但控制台阵列与原始阵列相同
然后我尝试使用lodash:
但它不起作用,因为它只能在这样的数组上工作:[[1,2,'abc'],['x',True,'z'],11]
我尝试通过以下方式使用香草JavaScript实现:
但也没有结果
我尝试了堆栈溢出中关于部分展平对象的答案:
//Method 4:
for (const elem of this.array) {
for (const prop of props) {
if (Array.isArray(elem[prop])) {
const result = elem[prop].map(
({prop, ...rest}) => Object.assign(rest, ...Object.keys(prop).map(key => {[elem[prop]+"_"+prop] : elem[prop]})));
}
}
}
console.log(this.array)
也没有结果
下面是一个用所有4种方法描述问题的示例。您可以尝试以下方法:
数组=[
{
id:123,
姓名:'彼得',
电话:,
地址:
[{地址1:'英国曼彻斯特',地址2:'英国伦敦'},{地址1:'英国利物浦',地址2:'美国纽约'}]
},
{
id:124,
名字:“莎拉”,
电话:,
地址:[{地址1:'英国伦敦',地址2:'法国巴黎'}]
}
];
让计数=[];
array.mapa=>{
a、 addresses.mapb=>{
Object.keysb.mapc,ind=>{
伯爵1
a[c.slice0,-1+count.length]=Object.valuesb[ind]
}
}
计数=[]
删除a.地址;
}
console.LogArrayTanks。但有时我们不知道地址数组的大小,这是一个示例,所以其他字段可能是一个需要展平的数组。啊,是的@alim1990,我看我错过了。让我快速修复并更新AnswerOk@alim1990,我使它适用于地址数组中的任意数量的对象=
// Method 2 using lodash
for (const elem of this.array) {
for (const prop of props) {
if (Array.isArray(elem[prop])) {
elem[prop] = _.flatten(elem[prop])
}
}
}
console.log(this.array)
//Method 3: Vanilla JavaScript
console.log(this.array.flat())
//Method 4:
for (const elem of this.array) {
for (const prop of props) {
if (Array.isArray(elem[prop])) {
const result = elem[prop].map(
({prop, ...rest}) => Object.assign(rest, ...Object.keys(prop).map(key => {[elem[prop]+"_"+prop] : elem[prop]})));
}
}
}
console.log(this.array)