我正在尝试访问以下数组中的数据,但在使用.forEach时遇到问题
我想访问所有singleLine.text
,但它不会让我。我猜是因为同一级别有多个singleLines。
var a = [
{ boxedCharacters: { text: '1040043' } },
{ singleLine: { text: '東京都中央区日本橋新古町' } },
{ singleLine: { text: 'この度は、数多くのお店の中から当店を'} },
{ singleLine: { text: 'お選びご来店頂きまして誠にありがとう'} }
]
a.forEach(function(value){
console.log(value.singleLine.text)
})
我已经尝试this但它不是最好的解决方案,因为它会为boxedCharacters创建一个空数组,因为它与传入的属性值不匹配。 另外,我可以有多个boxedCharaters和其他同名的键。
function genNewArray(jsonArray)
{return results.map(function(a){
return {[jsonArray]: a[jsonArray]}
})
}
var i = genArray(‘singleLine’)
关于如何访问这些值的更好的想法?
答案 0 :(得分:0)
$.each(a, function(entryIndex, entry) {
$.each(this.singleLine, function() {
alert(this.text);
});
});
答案 1 :(得分:0)
在第一种情况下,由于console.log(value.singleLine.text)
,它失败了。由于该数组还有一个名为key
的{{1}},并且当项boxedCharacters
时forEach
内,{ boxedCharacters: { text: '1040043' } },
找不到value.singleLine
。所以它会失败
var a = [{
boxedCharacters: {
text: '1040043'
}
},
{
singleLine: {
text: '東京都中央区日本橋新古町'
}
},
{
singleLine: {
text: 'この度は、数多くのお店の中から当店を'
}
}, {
singleLine: {
text: 'お選びご来店頂きまして誠にありがとう'
}
}
]
a.forEach(function(value) {
if (value.singleLine) {
console.log(value.singleLine.text)
}
})

答案 2 :(得分:0)
您可以尝试以下方法:
const a = [
{ boxedCharacters: { text: '1040043' } },
{ singleLine: { text: '東京都中央区日本橋新古町' } },
{ singleLine: { text: 'この度は、数多くのお店の中から当店を'} },
{ singleLine: { text: 'お選びご来店頂きまして誠にありがとう'} }
];
const getSingleLine = o => (o&&o.singleLine);
const getText = o => (o&&o.text);
const getSingleLineText = o => getText(getSingleLine(o))
console.log(
a.map(getSingleLineText)
.filter(x=>!!x)//remove undefined
)

或者你可以将对象减少到值,如果值不存在则返回undefined:
const tryGet = keys => object =>
keys.reduce(
(o,key)=>
(o!==undefined && o[key]!==undefined)
? o[key]
: undefined,
object
);
const getSingleLineText = tryGet(["singleLine","text"]);
console.log(
a.map(getSingleLineText)
.filter(x=>!!x)//remove undefined
);
答案 3 :(得分:0)
您只需要测试singleLine是否有值..
a.forEach(function(value){
if(a.singleLine) console.log(value.singleLine.text)
})