Замените «тег» (строку) на все совпадения в JavaScript - PullRequest
2 голосов
/ 26 сентября 2019

Я пытаюсь переставить строку, которая соответствует следующим возможным значениям.

У меня есть объект в следующем формате

{
  descriptions: ["Here's some <tag> exemple", "Can be something without Tag"],
  headlines: ["<tag> another exemple", "<tag>"]
}

У меня есть массив с различными перестановками для

["First","Second","Third"]

Я пытаюсь создать столько объектов, сколькоперестановка, чтобы получить этот результат в конце

[
  {
    descriptions: ["Here's some First exemple", "Can be something without Tag"],
    headlines: ["First another exemple", "First"]
  },
  {
    descriptions: [
      "Here's some Second exemple",
      "Can be something without Tag"
    ],
    headlines: ["Second another exemple", "Second"]
  },
  {
    descriptions: ["Here's some Third exemple", "Can be something without Tag"],
    headlines: ["Third another exemple", "Third"]
  }
];

Я застрял здесь ..

function foo(adCopy: AdCopy[], tag: string, variants: string[]) {
  variants.forEach(variant => {
    adCopy.forEach(adCopy => {
      adCopy.headlines.map(headline => {

      })
    })
  })
}

Ответы [ 2 ]

1 голос
/ 26 сентября 2019
const mapObj = (obj, map) => Object.fromEntries(Object.entries(obj).map(map));

const result = variants.map(variant =>
   adCopies.map(adCopy =>
     mapObj(adCopy, ([key, values]) => ([
        key, 
        values.map(value => value.replace(/<tag>/, variant))
     ]))
   )
);

Вы можете отобразить все переменные на их перестановки, и вы можете использовать Object.fromEntries и Object.entries для сопоставления объектов.

0 голосов
/ 26 сентября 2019

Если вы не хотите изменять исходный объект, вы можете сделать это:

let obj = {
	descriptions: ["Here's some <tag> exemple", "Can be something without Tag"],
	headlines: ["<tag> another exemple", "<tag>"]
};
let permutations = ['First', 'Second', 'Third'];

let objMapped = permutations.map(permutation =>
	Object.entries(obj).reduce((acc, [key, values]) => {
		acc[key] = values.map(value => value.replace(/<tag>/g, permutation));
		return acc;
	}, {}));

console.log(objMapped);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...