大容量数据的嵌套数组排序



我有以下数据作为嵌套数组,请参阅下面的fiddlehttps://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) 
}
}

但返回一个空对象";{}";我不太熟悉嵌套数组,有人能帮我在这里做错了什么吗?

_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 }));

这里不需要第二个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链接。

最新更新