Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环遍历一个json,找到具有特定首字母的所有键,并将其放入另一个json中_Javascript_Node.js_Json - Fatal编程技术网

Javascript 循环遍历一个json,找到具有特定首字母的所有键,并将其放入另一个json中

Javascript 循环遍历一个json,找到具有特定首字母的所有键,并将其放入另一个json中,javascript,node.js,json,Javascript,Node.js,Json,我想循环使用我的json,找到所有键及其值的前两个字母QM 这是我的json: 解决办法应该是 QMSI: [{ QM6_QMSI2: '1899-12-30 15:36:57', Qm_7QMSI5: 'lucas' }] 我已尝试过此代码,但它不适用于我: var results = []; var newJson = json[0]; var len = Object.keys(json[0]).length; for (var i = 0;

我想循环使用我的json,找到所有键及其值的前两个字母QM 这是我的json:

解决办法应该是

QMSI: [{
        QM6_QMSI2: '1899-12-30  15:36:57',
        Qm_7QMSI5: 'lucas'
}]
我已尝试过此代码,但它不适用于我:

var results = [];
 var newJson = json[0];
  var len = Object.keys(json[0]).length;
  for (var i = 0; i < len; i++) {
    if (newJson[i].indexOf("QM") == 0) results.push(newJson[i]);
  }
  console.log(results);
}
你可以用

为阵列中的每个对象生成一个新对象,该对象仅包含要查找的属性:

var json=[{ MHF46:‘Ledig’, MHF181:'06', QM6_QMSI2:‘1899-12-30 15:36:57’, Qm_7QMSI5:“卢卡斯”, mEntry9:'123123', mEntry3:‘2019-08-28’ }, { MHF46:‘Ledig’, MHF181:'06', QM6_QMSI21:'xxx1899-12-30 15:36:57', Qm_7QMSI51:“xxxlucas”, mEntry9:'123123', mEntry3:‘2019-08-28’ }]; var result=json.mapfunctione{ var newe={}; 对于e中的var i{ 如果i.toUpperCase.startsWith'QM'{ newe[i]=e[i]; } }; 返回newe; }; console.logresult var json=[{MHF46:'Ledig', MHF181:'06', QM6_QMSI2:‘1899-12-30 15:36:57’, Qm_7QMSI5:“卢卡斯”, mEntry9:'123123', mEntry3:‘2019-08-28’ } ] var results=JSON.parseJSON.stringifyjson[0]; Object.keysresults.forEachkey=>{ if!key.toLocaleLowerCase.startWithQM 删除结果[键] }
控制台。日志结果 有很多方法可以做到这一点,这里是一个过滤器和减少的例子

常量输入=[ {MHF46:'Ledig', MHF181:'06', QM6_QMSI2:‘1899-12-30 15:36:57’, Qm_7QMSI5:“卢卡斯”, mEntry9:'123123', mEntry3:‘2019-08-28’ } ]; const output=Object.keysinput[0] .filterkey=>key.toLowerCase.substring0,2==='qm' .reduceobj,key=>{ obj[key]=输入[0][key]; 返回obj; }, {}; console.logoutput 另一个变体使用Object.entries而不是Object.keys来获取键/值对,因此我们不必两次引用输入[0]。并使用Object.fromEntries将结果转换回对象,而不是手动映射或减少它

常量输入=[{ MHF46:‘Ledig’, MHF181:'06', QM6_QMSI2:‘1899-12-30 15:36:57’, Qm_7QMSI5:“卢卡斯”, mEntry9:'123123', mEntry3:‘2019-08-28’ }]; 常量输出=[ Object.fromEntries Object.entries输入[0]。筛选器[prop]=>prop.toLowerCase.startsWith'qm' ];
console.log输出 也许这能帮你

var desired_values = {}
json.forEach( function(item) {
  var keys = Object.keys(item);
    keys.filter(j => {if(j.substr(0,1) == 'Q'){
      desired_keys[j] = item[j]
    }})
  })
  console.log(desired_values) 
}
//result -> {QM6_QMSI2: '1899-12-30  15:36:57', Qm_7QMSI5: 'lucas'}

您忘了定义newJson变量。您想只在该对象上循环,还是数组中可以有更多对象?数组中只有一个对象您想只比较键,所以使用var newJson=object.keysjson[0];
var desired_values = {}
json.forEach( function(item) {
  var keys = Object.keys(item);
    keys.filter(j => {if(j.substr(0,1) == 'Q'){
      desired_keys[j] = item[j]
    }})
  })
  console.log(desired_values) 
}
//result -> {QM6_QMSI2: '1899-12-30  15:36:57', Qm_7QMSI5: 'lucas'}