批量数据的嵌套数组排序

Nested array sorting for bulk data

我有以下数据作为嵌套数组,请看下面fiddle https://jsfiddle.net/athulmathew/z3s1w0mu/ 我想从下面的数组中获取输出

var item {caller_number_raw : data from the array,company_id:data from the array}

我试着这样排序

for (i in data.data.hits) {
  for (j in data.data.hits[i]._source) {   
    //str += data.data.hits[i]._source[j] + "<br/>";
    var Item ={CallerID:data.data.hits[i]._source[j].caller_number}       
    console.log(Item) 
  }
}

但是returns一个空对象“{}”我对嵌套数组不是很熟悉谁能帮我解决我在这里做错的问题

这里不需要第二个 for in 循环,因为 _source 是一个对象。

for (let i in data.data.hits) {
    if(data.data.hits[i]._source.caller_number){
      var Item = {
        CallerID: data.data.hits[i]._source.caller_number
      }
       console.log(Item)
    }
   
}

这是解决方案的 jsFiddle link

_source只是一个Object,你不必为了得到一个特定的属性而遍历它的属性,你可以替换第二个只用 var Item ={CallerID:data.data.hits[i]._source.caller_number} .

循环

此外,由于data.data.hits是一个数组,所以使用for...of或普通的for循环比for...in更合适。

这是一个例子:

for (const hit of data.data.hits) {
    const item = { CallerID: hit._source.caller_number };
    console.log(item);
}

虽然上面的示例可以运行,但它不会产生您提到的所需输出,为此,您可以使用如下内容:

for (const hit of data.data.hits) {
    const item = { caller_number_raw : hit.caller_number_raw, company_id: hit.company_id }
    console.log(item);
}

如果你想把所有新创建的对象存储到一个数组中,你可以这样做:

const output = [];
for (const hit of data.data.hits) {
    output.push({ caller_number_raw : hit.caller_number_raw, company_id: hit.company_id });
}
console.log(output);

使用函数式方法更容易:

const output = data.data.hits.map(({ caller_number_raw, company_id }) => ({ caller_number_raw, company_id }));