JS:循环槽字符串并将具有这些词的值的对象(一对一)添加到对象数组

时间:2019-03-05 00:01:10

标签: javascript arrays loops object

我有一个字符串( 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' }
 ]

(如果有人知道一种更好的方法来过滤主题标签,请告诉我,但我最主要的担心是我在上面提到的内容,在此先谢谢了)

2 个答案:

答案 0 :(得分:0)

我真的看不到每个对象使用两个不同的键重复相同值的目的,但是您可以使用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 :(得分:0)

在较新的浏览器中,您可以向后寻找#,将字符串数组映射到对象数组,然后简单地将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);