【问题标题】:JS: loop trough String and add object with value of these words (one for one) to an array of objectsJS:遍历字符串并将具有这些单词值的对象(一对一)添加到对象数组中
【发布时间】:2019-03-05 00:01:10
【问题描述】:

我得到一个字符串(var tags),它的单词用逗号隔开

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' }
 ]

(如果有人知道过滤标签的更好方法,请告诉我,但我主要关心的是我上面提到的,非常感谢提前)

【问题讨论】:

  • 拥有两个具有相同值的属性的对象的目的是什么?您应该使用更多详细信息编辑您的问题。
  • 这是因为某个插件,您可以在其中显示值和实际值之间存在差异。我不希望它们有所不同,但插件需要它们(键和值)。

标签: javascript arrays loops object


【解决方案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);

【讨论】:

  • 非常感谢,您知道如何阻止它插入已经存在的对象吗?
  • 最好的方法是使用由key 索引的对象而不是数组,然后首先检查obj[key] 是否存在 - 将该对象转回数组,调用Object.values on它。
【解决方案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))

【讨论】:

  • 谢谢,这是因为某个插件可以在显示值和实际值之间产生差异。我不希望它们有所不同,但插件需要它们(键和值)。你知道我怎样才能阻止它插入一个已经存在的对象吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 2019-09-17
  • 1970-01-01
  • 2019-01-04
相关资源
最近更新 更多