javascript - 向对象数组添加新属性(根据现有属性值分配特定值)

标签 javascript arrays object

在对象数组中,如何根据特定对象的属性值之一将具有特定值的新属性添加到特定对象。哎呀。真是拗口了。

例如,这是一个对象数组:

var data = [
    {"label":"event1","name":"Red Total","count":220,},
    {"label":"event2","name":"Green Total","count":330,},
    {"label":"event3","name":"Blue Total","count":440,},
    {"label":"overlap1","name":"Red","count":200,},
    {"label":"overlap2","name":"Green","count":300}
]

所有这些对象都应该获得两个新属性: xy 。我知道值为 event1label始终分配 x0.5y0.75。我知道值为 event2label始终分配 x1/30.235y 等...以下是我想要的结果。

var data = [
    {"label":"event1","name":"Red Total","count":220,"x":0.5,"y":0.75},
    {"label":"event2","name":"Green Total","count":330,"x":0.333,"y":0.235},
    {"label":"event3","name":"Blue Total","count":440,"x":0.666,"y":0.235},
    {"label":"overlap1","name":"Red","count":200,"x":0.9,"y":0.9},
    {"label":"overlap2","name":"Green","count":300,"x":0.9,"y":0.9}
]

x 和 y 值尚未存储在任何特定位置或格式,它们只是已知的,因此完全灵活。

想法 1: 也许它们应该存储为另一个对象数组,并以 label 作为公共(public)键,然后根据该键的值以某种方式合并这两个对象?我不知道。

var xAndY = [
    {"label":"event1","x":0.5,"y":0.75},
    {"label":"event2","x":0.333,"y":0.235}
}

想法 2:或者可以将它们存储为数组对?

var xAndY = [
    [0.333,0.75],
    [0.666,0.235]
}

更多上下文:我也不会总是知道哪些对象将在数组中。有时 event1event2event3 会在那里。有时,只有 event1event2。所以,我正在考虑某种 if 语句。就像想法 1(用简单的语言):

if label = event1, add these new properties x:0.5 and y:0.75
if label = event2, add these new properties x:0.666 and y:0.235

或想法2

if label = event1, add these new properties x:xAndY[0][0] and y:xAndY[0][1]
if label = event2, add these new properties x:xAndY[1][0] and y:xAndY[1][1]

显然我不知道如何解决这个问题。感谢您给我的任何指导。

最佳答案

这可能是一个使用 map 的好地方(可能通过 lodash 或下划线):

var data = [
    {"label":"event1","name":"Red Total","count":220,},
    {"label":"event2","name":"Green Total","count":330,},
    {"label":"event3","name":"Blue Total","count":440,},
    {"label":"overlap1","name":"Red","count":200,},
    {"label":"overlap2","name":"Green","count":300}
]

var valueMap = {
  event1: {
    x: 0.5,
    y: 0.75
  },
  event2: {
    x: 1,
    y: 2
  },
  event3: {
    x: 2,
    y: 4
  },
  overlap1: {
    x: 6,
    y: 3
  },
  overlap2: {
    x: 0.3,
    y: 0.1
  }
}

var fullData = data.map(function(el) {
  var values = valueMap[el.label];
  el.x = values.x;
  el.y = values.y;
  return el;
})

关于javascript - 向对象数组添加新属性(根据现有属性值分配特定值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31930847/

相关文章:

javascript - Google Closure 编译器解析错误 : invalid property id for `css({float:' left'})`

javascript - 为什么javascript接受小数作为整数

php - 如何对 PHP 数组进行 GROUP BY 和 SUM?

c - 函数中调用的函数 C 中使用的二维动态数组参数不起作用

c++ - 使用指向对象的指针进行析构

javascript - 在 Node.js 中使用函数创建对象

javascript - Sequelize 关联 : How to update parent model when creating child?

javascript - 如何使用 codeigniter 上传和移动文件 onclick 按钮 jquery?

c - Hangman 程序字符串问题

javascript - 使用 Object.assign() 删除对象属性