簡體   English   中英

JS(如​​果存在鍵),包括到數組

[英]JS if key exist, include to array

我被困在將對象映射到數組。 我使用map,但是它在數組中添加了每個對象字段,所以我有很多未定義的地方。

  const mapKey: { [key: string]: number } = { 'hello': 3, }; preferences = { hello: true, ..... ..... } const array = Object.entries(preferences).map(([key, value]) => { return mapKey[key] && { index: mapKey[key], visible: true }; }); 

結果是:

 [undefined, undefined....{ index: mapKey[key], visible: true }] but i need just [{ index: mapKey[key], visible: true }] 

Array#map方法根據返回值生成一個數組,它不適合要求,因此請使用Array#reduce方法。

const array = Object.entries(preferences).reduce((arr, [key, value]) => {
   // push into the array only if defined
   columnIndexMap[key] && arr.push({ index: mapKey[key], visible: true });
   // return the array reference for next iteration
   return arr;
   // set initial value as empty array for the result
}, []);

一線解決方案:

const array = Object.entries(preferences).reduce((arr, [key, value]) => (columnIndexMap[key] && arr.push({ index: mapKey[key], visible: true }), arr), []);

reduce課程的答案當然有效。 您還可以使用filter() + map 這具有兩次查看值的缺點,但是具有可讀性的優點。 當然,哪個更重要取決於您的用例。 除非有太多數據使其他工作引人注目,否則我將傾向於以下情況:

 const mapKey = { 'hello': 3, 'test':4, 'test2': 5}; let preferences = { hello: true, test:false, test2:true} let filtered = Object.entries(preferences) .filter(([k, visible]) => visible) .map(([k, visible]) => ({ index: mapKey[k], visible })) console.log(filtered) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM