【问题标题】:Reading JSON object value with key pattern使用键模式读取 JSON 对象值
【发布时间】:2021-06-14 05:12:26
【问题描述】:

我的JSON结构如下

var data = [
        {name:'bracket', start_45641654:'46513489431',end_26441:'75434'},
        { name: 'notation', end_746413: '2146464', start_51345641: '76542464' },
    ];

我想打印开始、结束对象值,这里将一个随机数附加到键 start_ 和 end_。尝试使用 ^ 正则表达式模式,但它不起作用。还有其他打印值的方法吗?

data.forEach(function (v, i) {
        $('tr').prepend('<td>Name:' + v['name'] + '</td>' +
            '<td>Start:' + v['^start_'] + '</td>' +
            '<td>End:' + v['^end_'] + '</td>'
            );
    });

【问题讨论】:

标签: javascript jquery json


【解决方案1】:

你不能在那里使用正则表达式。

您可以遍历对象的属性,检查名称是否具有所需的前缀。

data.forEach(function(v) {
  let start, end;
  Object.entries(v).forEach(([key, val]) => {
    if (key.startsWith('start_')) {
      start = val;
    } else if (key.startsWith('end_')) {
      end = val;
    }
  });
  $('tr').prepend('<td>Name:' + v.name + '</td>' +
    '<td>Start:' + start + '</td>' +
    '<td>End:' + end + '</td>'
  );
});

【讨论】:

    【解决方案2】:

    var data = [
            {name:'bracket', start_45641654:'46513489431',end_26441:'75434'},
            { name: 'notation', end_746413: '2146464', start_51345641: '76542464' },
        ];
        
        data.forEach(function (v, i) {
             
             var start = Object.keys(v).find((name) => /start/.test(name));
               var end = Object.keys(v).find((name) => /end/.test(name));
               console.log(start+" "+end);
             
            $('tr').prepend('<td>Name:' + v['name'] + '</td>' +
                '<td>Start:' + v[start] + '</td>' +
                '<td>End:' + v[end] + '</td>'
                );
        });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <table>
    <tr></tr>
    </table>

    检查这个。我不知道使用正则表达式和索引访问对象键是否有效。但这应该对你有用。

    【讨论】:

      【解决方案3】:

      注意:我是即时编写的,您可能需要对其进行调整

      for(let item of data) { // iterate through array
        for(let key in item) { // iterate through object keys
          if(!key.hasOwnProperty()) // you may wont need it, it makes sure the key you are bringing aren't inherited and the current object is owner of them, mostly used with arrays
            return
          if(key.indexof('start_') >= 0) // which should be 0 if is ok and -1 if not ok
          {
            // your code for start
            // to get value: item[key]
          }
          if(key.indexof('end_') >= 0) // which should be 0 if is ok and -1 if not ok
          {
            // your code for end
            // to get value: item[key]
          } 
        }
      }
      

      注意:您可以将JSON 文件/资源​​读取为string,而不是object(取决于使用的方法),在这种情况下使用JSON.parse(&lt;yourStringJson&gt;)

      【讨论】:

        【解决方案4】:

        你可以使用数组的reduce函数来实现。对于每个循环和条件相关的逻辑,您不需要使用 for, for。

        例如:

        const data = [
          { name: "bracket", start_45641654: "46513489431", end_26441: "75434" },
          { name: "notation", end_746413: "2146464", start_51345641: "76542464" },
        ];
        
        console.log(data);
        
        const startEndData = data.reduce((p, c) => {
          const { name, ...rest } = c;
          return [...p, rest];
        }, []);
        
        console.log(startEndData);

        【讨论】:

          猜你喜欢
          • 2021-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-12
          相关资源
          最近更新 更多