基于条件过滤打印键值对

时间:2021-06-21 09:40:08

标签: javascript

我正在处理一个 pdf,它是用 jspdf 生成的。为此,我首先创建了一个数组,它反映了我界面中的输入:

let itemNew = [
 { index:'Kosten für Stories:',id: `${storiesNumber.value} Stories für ${storiesCosts.value} € monatlich` },
 { index:'Kosten für Posts:',id: `${postsNumber.value} Posts für ${postsCosts.value} € monatlich` },
 { index:'Kosten für Reels:',id: `${reelsNumber.value} Reels für ${reelsCosts.value} € monatlich` },
 { index:'Kosten für Bio:',id: `${bioCosts.value} € einmalig `},
 { index:'Redaktionsplan:',id: `${redaktionsplanCosts.value} € einmalig `},
 { index:'Monatliche Auswertung:',id: `${auswertungCosts.value} € einmalig `},
]

由于默认情况下不需要这些输入,因此当用户点击“生成 Pdf”按钮时,其中一些可以保持为空。空输入不应呈现为 pdf。为此,我需要以某种方式过滤掉那些并将上面的代码与下面的代码链接

itemNew.forEach(element => {
 arr = [Number(storiesNumber.value), Number(postsNumber.value), Number(reelsNumber.value),  Number(bioCosts.value), Number(redaktionsplanCosts.value), Number(auswertungCosts.value)]
 arr.filter(Boolean)
 var temp = [element.index,element.id];
 rows.push(temp);
}); 

我知道,目前这些是两段代码,并没有真正相互关联。我试图实现的是,当 Number(storiesNumber.value) == false, { index:'Kosten für Stories:',id: ${storiesNumber.value} Stories für ${storiesCosts.value} € monatlich } 不会被推入行。

2 个答案:

答案 0 :(得分:1)

你可以使用 filter 和 map after 得到你想要的结果。

const storiesNumber = { value: "" };
const storiesCosts = { value: "" };
const postsNumber = { value: "" };
const postsCosts = { value: "" };
const reelsNumber = { value: "" };
const reelsCosts = { value: "" };
const bioCosts = { value: "" };
const redaktionsplanCosts = { value: "" };
const auswertungCosts = { value: "" };

let itemNew = [
  {
    index: "Kosten für Stories:",
    id: `${storiesNumber.value} Stories für ${storiesCosts.value} € monatlich`,
  },
  {
    index: "Kosten für Posts:",
    id: `${postsNumber.value} Posts für ${postsCosts.value} € monatlich`,
  },
  {
    index: "Kosten für Reels:",
    id: `${reelsNumber.value} Reels für ${reelsCosts.value} € monatlich`,
  },
  { index: "Kosten für Bio:", id: `${bioCosts.value} € einmalig ` },
  { index: "Redaktionsplan:", id: `${redaktionsplanCosts.value} € einmalig ` },
  {
    index: "Monatliche Auswertung:",
    id: `${auswertungCosts.value} € einmalig `,
  },
];

arr = [
  Number(storiesNumber.value),
  Number(postsNumber.value),
  Number(reelsNumber.value),
  Number(bioCosts.value),
  Number(redaktionsplanCosts.value),
  Number(auswertungCosts.value),
];

const row= itemNew.filter((_, i) => arr[i] !== 0).map(x => [x.index, x.id]);

console.log(row);

答案 1 :(得分:0)

.filter() 不会修改原始数组。它返回您过滤后的数组。

由于您已经按照正确的顺序构造了 arr 数组,因此您可以使用它。在过滤器函数中使用 index 来过滤您的 itemNew 数组。

let arr = [Number(storiesNumber.value), Number(postsNumber.value), Number(reelsNumber.value),  Number(bioCosts.value), Number(redaktionsplanCosts.value), Number(auswertungCosts.value)]

let ans = itemNew.filter((x,index)=>{
  return arr[index] == 0;
}).forEach(y => { rows.push([y.index,y.id]) });

相关问题