javascript - 在 NodeJS 中将 K,V 对分配给 JSON 对象

标签 javascript arrays node.js json

我有一个 NodeJS 脚本,它以“键、值”对的形式从源获取数据,我想将该数据放入 JSON 对象中。

我正在使用 SNMP 来获取 k、v 对,其中 key 是 OID。然后,我想将这些值映射到 JSON 对象,而不必根据已知值迭代检查每个 OID。

k,v 对本身存储在对象中,我对此传入数据没有灵 active 。

let pair = {
    key: "abc...",
    value: "xyz..."
}

我已将 JSON 对象定义为空结构。

let jsonObject = {
    ipaddress: "",
    network: {
        uptime: "",
        throughput: "",
        devices: ""
    }
}

我遍历我的键(pairs 是包含 k,v 对象的数组的名称)

for (let i = 0; i < pairs.length; i++) {
    if (pairs[i].key == "1.2.3.4.5.6.7") jsonObject.ipaddress = pairs[i].value;
    if (pairs[i].key == "2.3.4.5.6.7.8") jsonObject.network.uptime = pairs[i].value;
    if (pairs[i].key == "3.4.5.6.7.8.9") jsonObject.network.devices = pairs[i].value;
}

我想知道是否有任何方法可以简化这个过程,因为我有大约 200 个键需要处理(上面的代码只是一个示例),并且对于我来说迭代每个可能的键似乎并没有特别优化。

编辑:jsonObject 比此处显示的要复杂得多,有很多层,并且键的名称与所示的 json 对象属性名称不 1:1 匹配。

编辑 2:我知道这看起来很奇怪。 例如,我想采用 K,V 输入:

Key            Value
1.2.3.4.5.6    "10.0.0.1"
2.3.4.5.6.7    "3 Days 14 Hours 32 Minutes"
3.4.5.6.7.8    "1.1.1.1"

并将其转换为不同名称的 JSON 对象

{
    uptime: "3 Days 14 Hours 32 Minutes",
    networking: {
        ip: "10.0.0.1",
        dns: "1.1.1.1"
    }
}

可能使用某种形式的映射,而不是使用大约 200 个 if 语句

最佳答案

使用Array.prototype.reduce功能。

const { name, ...properties } = pairs.reduce(
  (obj, { key, value }) => Object.assign(obj, { [key]: value }),
  {}
)

const obj = { name, properties }

Reduce 会将数组缩减为标量,在本例中是一个对象,其中所有 k,v 对作为对象上的值字段,以 {} 开始作为默认值,每次合并每个 k,v 对 1。

Object.assign将合并对象,用右侧对象的键字段覆盖左侧对象。

最后,在对象文字上动态添加键的语法是 { [k]: v }

顺便说一下,这是一个有用的技巧,可以降低需要在循环中查找数组中的值的算法的复杂性。只需创建一个数组的索引,然后在循环中,在索引中查找即可。

关于javascript - 在 NodeJS 中将 K,V 对分配给 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60264357/

相关文章:

javascript - 在javascript中读取cookie,由asp.net c#code制作

OOP 的 JavaScript 命名空间和模式

php:显示关联数组的每个元素的键和值

c# - 如何将字节 [] 写入 Excel 文件?

Node.js - 服务器不是构造函数() ES6

javascript - npm run build 后 React 组件的 onClick 未呈现

javascript - 如何在另一个 HTTP 请求中使用一个 HTTP 请求中的 $scope 值

javascript - 这行代码真的可以用于检测 HTML5 支持吗?

java - JNI 访问数组的数组

javascript - 如何使用 JS 将文本文件转换为 CSV 文件,同时保持文本文件格式?