#javascript #arrays #loops #object
#javascript #массивы #циклы #объект
Вопрос:
Я получил строку (теги var), ее слова разделены запятой
var msg ='#yeah alter #wow #cool dadadda'
function listTags(){
if(!tagsss.some(r=> msg.indexOf(r) >= 0))
(tagsss).push(msg.match(/#w /g).map(v => v.replace('#', '')))
return (msg.match(/#w /g).map(v => v.replace('#', '')))
}
var tags = listTags().toString() // result: yeah,wow,cool
И я получил массив объектов
var arrOfObj = [
{ key: 'Sarah', value: 'Sarah' },
{ key: 'Evan', value: 'Evan' },
{ key: 'Adam', value: 'Adam' }
]
Как я могу выполнить цикл через мою строку и создать для каждого слова новый объект внутри моего arrOfObj. Итак, для каждого отдельного слова (давайте назовем его x
) я хотел бы добавить такой объект:
{key: x, value: x }
Итак, в моем примере результат после первого цикла будет
var arrOfObj = [
{ key: 'Sarah', value: 'Sarah' },
{ key: 'Evan', value: 'Evan' },
{ key: 'Adam', value: 'Adam' },
{ key: 'yeah', value: 'yeah' }
]
(Если кто-то знает лучший способ фильтрации хэштегов, дайте мне знать, но моя главная забота — это то, что я упомянул выше, заранее большое спасибо)
Комментарии:
1. Какова цель иметь объект с двумя свойствами с одинаковым значением? Вам следует отредактировать свой вопрос, добавив в него более подробную информацию.
2. это из-за определенного плагина, в котором вы можете отличаться между отображаемым значением и фактическим значением. Я не хочу, чтобы они отличались, но плагину требуются они оба (ключ и значение).
Ответ №1:
В более новых браузерах вы можете искать за #
, сопоставлять массив строк с массивом объектов, а затем просто concat
использовать исходный массив:
var arrOfObj = [
{ key: 'Sarah', value: 'Sarah' },
{ key: 'Evan', value: 'Evan' },
{ key: 'Adam', value: 'Adam' }
];
var msg ='#yeah alter #wow #cool dadadda';
const result = arrOfObj.concat(
msg
.match(/(?<=#)w /g)
.map(key => ({ key, value: key }))
);
console.log(result);
Комментарии:
1. Большое спасибо, вы знаете, как я мог бы предотвратить вставку уже существующего объекта?
2. Лучшим способом было бы использовать объект, проиндексированный
key
вместо массива, а затем сначала проверить,obj[key]
существует ли — чтобы превратить этот объект обратно в массив, вызовитеObject.values
его.
Ответ №2:
Я действительно не вижу смысла повторять одно и то же значение с двумя разными ключами для каждого объекта, но вы можете легко достичь этого с помощью функции отображения массива JS:
var tags = 'banana,pineapple,passionfruit,durian,jackfruit';
var arrOfObj = [ { key: 'Sarah', value: 'Sarah' },
{ key: 'Evan', value: 'Evan' },
{ key: 'Adam', value: 'Adam' } ];
var objArr = tags.split(',').map( a => {
return {key: a, value: a};
});
console.log(arrOfObj.concat(objArr))
Комментарии:
1. спасибо, это из-за определенного плагина, где вы можете отличаться между отображаемым значением и фактическим значением. Я не хочу, чтобы они отличались, но плагину требуются они оба (ключ и значение). Знаете ли вы, как я мог бы предотвратить вставку уже существующего объекта?