【问题标题】:How to exclude keys from a map and display only the values?如何从地图中排除键并仅显示值?
【发布时间】:2020-08-01 05:35:56
【问题描述】:

我有一个Object obj 如下:

const obj = {
         Hostname: "abc"
         id: 189883
         message: "error message"
         name: "script name"
};
  1. 我想排除键 Hostname 及其值。
  2. 我只想捕获values,不包括keys,这样输出如下所示: 189883:error message:script name

最终输出应该是string。 我已经编写了以下代码,但它正在为每个字母创建数组元素

const resultObj = Object.values(vascoResponse.rows[0]obj).map((row) =>
  Object.values(row).filter((val) => val)
);

【问题讨论】:

    标签: javascript node.js dictionary object


    【解决方案1】:

    您可以获取对象的条目以获得[[key, value], [key2, value2], ...] 对的数组。然后您可以在其上使用.filter() 以删除密钥为"Hostname" 的对。最后,您可以将每个内部数组映射到其值并使用.join(":") 获取字符串:

    const obj = {
       Hostname: "abc",
       id: 189883,
       message: "error message",
       name: "script name"
    };
    
    const res = Object.entries(obj)
                 .filter(([key]) => key !== "Hostname")
                 .map(([,v]) => v).join(":");
    
    console.log(res);

    如果您需要将此功能提取到函数中,您可以解构对象参数以获取除Hostname 之外的所有键/值,然后基于此抓取并连接值:

    const obj = {
       Hostname: "abc",
       id: 189883,
       message: "error message",
       name: "script name"
    };
    
    const getString = ({Hostname, ...r}) => Object.values(r).join(':');
    console.log(getString(obj));

    【讨论】:

    • 您甚至可以更进一步,将其作为 IIFE 运行:console.log((({Hostname, ...r}) => Object.values(r).join(':'))(obj)) ;-)
    • @cars10m 哈哈,你是对的?。您甚至可以使用逗号运算符:({Hostname, ...r} = obj, Object.values(r).join(',')),但这会将变量添加到全局范围,并且在严格模式下不起作用。
    【解决方案2】:

    所以我知道你打算这样做,但我个人会完全避免Object.values()。作为决定如何处理数组的一般规则,我会尝试提出以下问题:

    • 是否要根据键从对象中提取值的子集? -> 使用Object.keys() 过滤
    • 是否要根据值从对象中提取值的子集? -> 使用Object.values()
    • 我想把一个数组变成另一个长度相等的数组吗? -> 使用array.map()
    • 我想把一个阵列变成一个更短的阵列吗? -> 使用array.filter()
    • 我想把一个数组变成一个像字符串一样的单一值吗? -> 使用array.reduce()

    由于您想要基于键的对象值的子集,并且您希望将其转换为字符串,那么我们可能应该使用Object.keys()array.filter(),然后是array.reduce(),如下所示:

    let obj = {
       Hostname: "abc",
       id: 189883,
       message: "error message",
       name: "script name"
    };
    
    let resultString = Object.keys(obj) //gets an array of keys from the object
      .filter(key => key != "Hostname") //removes 'Hostname' from the array
      .reduce((accumulator, key) => 
        accumulator == "" ? accumulator + obj[key] : accumulator + ":" + obj[key],
       "");
    
    console.log(resultString);

    如果您运行该代码片段,您会发现它输出的字符串与您每次所希望的完全一样。 reducer 中的三元运算符只是在每个新值之前添加“:”冒号字符的一种偷偷摸摸的方式,除非它是第一个值。

    【讨论】:

      【解决方案3】:

      使用Object.values()

      const objec = {
        Hostname: "abc",
        id: 189883,
        message: "error message",
        name: "script name"
      };
      res = Object.values(objec).filter((o,i) => o != "abc" ).join(":")
      console.log(res)

      【讨论】:

        【解决方案4】:

        const obj = {
             Hostname: "abc",
             id: 189883,
             message: "error message",
             name: "script name"
        };
        
        let str=Object.entries(obj)
         .filter(([k])=>k!=="Hostname")
         .map(([k,v])=>v).join(":");
        console.log(str)

        【讨论】:

          【解决方案5】:

          您可以使用deleteObject.values

          delete obj["Hostname"];
          Object.values(obj).join(":");
          

          【讨论】:

            【解决方案6】:

            你可以用这个:

            Object.fromEntries(Object.entries(obj).filter(([key, value]) => key !== 'id' && key !== 'Hostname'))
            

            let obj = {
              Hostname: "abc",
              id: 189883,
              message: "error message",
              name: "script name"
            };
            
            obj = Object.fromEntries(Object.entries(obj).filter(([key, value]) => key !== 'id' && key !== 'Hostname'))
            
            console.log(obj)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-03-24
              • 1970-01-01
              • 2022-11-10
              • 1970-01-01
              相关资源
              最近更新 更多