私は配列を繰り返し処理し、いくつかのHTMLタグを追加しようとしています。私は.map
を試しましたが、別の配列を返すので、HTMLのコンマを見ることができます。私は.forEach
を試してみましたが、コンソールにログオンすると動作しますが、HTMLで定義されていません。私はこれに対する答えを探し、コール関数に戻りませんと指摘するカップルの答えを見つけました。いくつかはコールバックを持っていて、呼び出し元から戻ってきたものの、呼び出し元の関数には戻っていませんでした。私はどこに戻っていないのか分からない。なぜforEachは未定義を返すが、コンソールにログする
wrapTag
はコンソールにログすることができるので返信していますが、wrappedItems
には渡されていないようです。
返品はありますか?.forEach
で正しく実装されていないものがありますか?
$(document).ready(function(){
let objR = {
key1:"5",
key2:"8",
key3:"6",
key4:"9",
key5:
{subKey1:"1",subKey2:"2",subKey3:"3",subKey4:"4"}
}
let arr = [];
let html = '';
const s = x => document.getElementById(x);
const isObject = val => (typeof val === "object") ? true : false;
const keyValueToArray = (obj) => {
for(let key in obj) {
let value = obj[key],
n = [];
if(!isObject(value)){
n.push(key, value);
arr.push(n);
}
else{
arr.push(key);
keyValueToArray(value);
}
}
return arr;
}
const typeCheck = (x) => {
console.log(typeof x);
return x;
}
const wrapTag = (item, tag, i) => isObject(item) ? '<' + tag + '>' + item[0] + ' : ' + item[1] + '</' + tag +'>'
:'<' + tag +'>' + item + ':</' + tag +'>';
//const wrappedItems = keyValueToArray(objR).map(x => wrapTag(x, 'li'))
const wrappedItems = keyValueToArray(objR).forEach(function(x, i, z){
var res = wrapTag(x, 'li');
console.log(res);
return res;
})
html = '<ul>';
html += wrappedItems;
html += '</ul>';
console.log(`html = ${html}`);
s('cards').innerHTML = html;
});
私はforEach
を無名関数でラップし、res
と宣言するにはを使用しました。私はをwrappedItems
関数に渡さなければなりませんでしたが、それは私が達成しようとしていたものとそれ程遠くはありません。 ここに改訂された機能があります。
const wrappedItems = (obj) => {
let res = '';
keyValueToArray(objR).forEach(function(x, i, z){
res += wrapTag(x, 'li');
console.log(res);
});
return res;
}
html = '<ul>';
html += wrappedItems(objR);
html += '</ul>';
私は '.map'を試しました。私のコードで見ることができるように、コメントアウトされています。配列を返すので、HTMLでカンマを取得します。私は 'for - in 'ループを使わずにこれをやろうとしていました。 – jwolf
@jwolfええ、私はコメントをスキップしました - それについて申し訳ありません。編集を参照してください。 –
私はこれを試してみましょう。それは上記の私の解決策よりもきれいだからです。 – jwolf