我有以下数据作为嵌套数组,请参阅下面的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链接。