Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript在对象内展开数组_Javascript_Arrays_Typescript_Lodash_Flatten - Fatal编程技术网

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)