向具有相同值的对象数组中再添加两个键和值?

时间:2019-03-21 15:54:50

标签: node.js json dictionary object foreach

我正在使用Node.js向Vimeo API发出Axios请求。

我和Json有点菜鸟,但我想了解。我用名称过滤器调用了Vimeo,所以我得到一个“对象数组”(我希望名称正确),如下所示:

 [{ name: 'A Personalized Goal for Anthony' },

 { name: 'Flow access & overview' },

 { name: 'Welcome - 2018 Conference' },

 { name: 'Dropout Video' } ] }

这只是视频的名称,但是我需要添加两个键值对,它们的值与下拉菜单的名称值相同,因此如下所示:

[{ name: 'A Personalized Goal for Anthony',
 "text": "A Personalized Goal for Anthony",
 "value": "A Personalized Goal for Anthony"  },

 { name: 'Flow access & overview',
   "text": "Flow access & overview"
   "value": "Flow access & overview" },

 { name: 'Welcome - 2018 Conference',
   "text": "Welcome - 2018 Conference"
   "value": "Welcome - 2018 Conference" },

 { name: 'Dropout Video',
   "text": "Welcome - 2018 Conference"
   "value": "Welcome - 2018 Conference" }] 

我的应用程序需要一个下拉菜单键“文本”和“值”,以便处理用户的响应。

我不确定为什么{name:'Dropout Video'},的格式不像{{name“:” Dropout Video“},

Node.js中是否有一种方法可以使用map或push使用相同的名称值添加或复制数组,同时还对该数组进行前向反射,以反映名称,但具有两个附加的键值对,它们具有与密钥名称?

这也是一个动态对象,因此当再次调用该请求时,它可能返回的不仅仅是4个视频名称。

我的目标是将大量视频添加到我要向其发出请求的Vimeo相册中,然后我的应用程序(Slack chatbot)然后通过下拉菜单为该菜单返回一个选项列表用户的考虑,以便我能够看到他们选择的名称或标题,因此需要更多信息。

非常感谢您的帮助。我希望Vimeo有一个“文本和值”字段,所以我可以只过滤它,但是那样就不会很有趣了:)

3 个答案:

答案 0 :(得分:1)

您可以映射结果,例如,在获得结果后:

    const movies =  [{ name: 'A Personalized Goal for Anthony' },
    { name: 'Flow access & overview' },
    { name: 'Welcome - 2018 Conference' },
    { name: 'Dropout Video' }];

您可以映射它以将其他两个属性添加到每个对象中,其优点是您不会改变结果。

    const mappedMovies = movies.map(movie => {
      return {
        name: movie.name,
        text: movie.name,
        value: movie.name
      }
    );

这样,您将获得具有所需格式的对象列表,现在,如果您需要json格式,则可以执行以下操作:

    const JSONString = JSON.stringify(mappedMovies);

答案 1 :(得分:0)

对象是引用,因此您可以遍历对象并添加键。

const videos = [
  { name: 'A Personalized Goal for Anthony' },
  { name: 'Flow access & overview' },
  { name: 'Welcome - 2018 Conference' },
  { name: 'Dropout Video' }
]

for (video of videos) {
    video.text = video.name
    video.value = video.name 
}

console.log(videos)

答案 2 :(得分:0)

欢迎来到SO Kevin,

您似乎已经快要自己提供答案了……

要获取结果数组,您可以映射对象并根据需要添加键:

const slackVideos = videos.map(function (item, label) {
    return {
        ...item, //this ensures all original keys are available, using the ES6 destructuring
        text: item.name,
        value: item.value,
    }
});

假设videos是从vimeo接收到的对象,slackVideos现在将包含附加的textvalue键;两者都包含来自原始vimeo对象的name键。