js扫描二维码如何解析取到的二维码信息

js调用摄像头扫描二维码之后,将返回的值用alert弹出来是[objectHTMLInputElement],请问该怎么解析返回的值。
(二维码扫描出来是一个数组,需要取其中一个字段的值)

function qrcodeScan(){
    window.MobileAPI.barcodeScan(idcard);
    alert("进入方法"+idcard);

img

努力の小熊参考Chatgpt做出的回答:
从代码中可以看出,window.MobileAPI.barcodeScan(idcard) 调用了移动设备的摄像头扫描二维码,并将扫描结果存储在 idcard 变量中。但是,在调用 alert 弹窗时,如果将 idcard 直接作为参数传入,就会以字符串形式输出对象信息,导致输出结果为 [object HTMLInputElement]

要获取二维码扫描结果并进行解析,可以通过以下两种方式实现:

1.使用回调函数。将 qrcodeScan 函数修改为带有回调函数的形式,当扫描完成后会执行回调函数,并将二维码扫描结果作为参数传递给回调函数。示例如下:

function qrcodeScan(callback) {
  window.MobileAPI.barcodeScan(function(result) {
    callback(result);
  });
}

// 使用示例
qrcodeScan(function(result) {
  // 解析 result 数据并进行处理,这里假设 result 是一个 JSON 对象
  var data = JSON.parse(result);
  console.log(data.field);  // 输出字段 field 的值
});

2.使用全局变量保存扫描结果。将 idcard 定义为全局变量,扫描完成后将二维码扫描结果赋值给该变量,然后在需要使用该结果的地方直接访问该全局变量即可。示例如下:

var idcard;  // 定义全局变量 idcard

function qrcodeScan() {
  window.MobileAPI.barcodeScan(function(result) {
    idcard = result;  // 将扫描结果赋值给全局变量 idcard
  });
}

// 在需要使用二维码扫描结果的地方直接访问全局变量 idcard 进行解析处理
console.log(idcard.field);  // 输出字段 field 的值

注意:使用全局变量存在多个函数共享一个变量的风险,需要注意数据安全和变量命名冲突等问题。建议使用第一种回调函数方式实现。

如果二维码的值是一个数组,并且您需要从数组中取出特定字段的值,可以使用数组的索引或者对象的属性来获取。比如:
// 获取第一个对象的 name 字段值
const nameValue = qrCodeValue[0].name;

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/342987
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:js将数组对象中某个值相同的对象合并成一个新对象并把这个对象插入到数组当中
  • 除此之外, 这篇博客: js树结构数据的递归操作中的 二、根据过滤条件筛选出需要留下节点的树结构数据 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 一般用于前端做树的查询功能。

    /**
     * 递归过滤节点,但保留原树结构,即符合条件节点的父路径上所有节点不管是否符合条件都保留
     * @param {Node[]} nodes 要过滤的树
     * @param {node => boolean} predicate 过滤条件,符合条件的节点保留(参数为函数,返回值为布尔值)
     * @param {node => boolean} wrapMatchFn 层级条件(参数为函数,返回值为布尔值)
     * @return 过滤后的包含根节点数组
     */
    export const filterSearchTree = (nodes, predicate, wrapMatchFn = () => false) => {
      // 如果已经没有节点了,结束递归
      if (!(nodes && nodes.length)) {
        return []
      }
      const newChildren = []
      for (let i = 0; i < nodes.length; i++) {
        const node = nodes[i]
        // 想要截止匹配的那一层(如果有匹配的则不用递归了,直接取下面所有的子节点)
        if (wrapMatchFn(node) && predicate(node)) {
          newChildren.push(node)
          continue
        }
        const subs = filterSearchTree(node.children, predicate, wrapMatchFn)
    
        // 以下两个条件任何一个成立,当前节点都应该加入到新子节点集中
        // 1. 子孙节点中存在符合条件的,即 subs 数组中有值
        // 2. 自己本身符合条件
        if ((subs && subs.length) || predicate(node)) {
          node.children = subs || []
          newChildren.push(node)
        }
      }
      return newChildren.length ? newChildren : []
    }
    
    const treeData = [{
        key: '全部',
        title: '全部',
        isLeaf: false,
        children: [{
            key: '数据库',
            title: '数据库',
            isLeaf: false,
            children: [
                {
                    key: 'mysql',
                    title: 'mysql',
                    isLeaf: false,
                    children: [
                        {
                            key: '142',
                            title: '慢查询',
                            isLeaf: true,
                        }, {
                            key: '137',
                            title: 'QPS',
                            isLeaf: true,
                        }, {
                            key: '143',
                            title: '用户列表',
                            isLeaf: true,
                        },
                    ],
                },
                {
                    key: '166',
                    title: 'SQL',
                    isLeaf: true,
                },
            ],
        }],
    }];
    
    // 要查找的关键字
    const searchValue = 'S';
    
    // 筛选到的树结构数据
    const newTreeData = filterSearchTree(
        treeData,
        (node) => {
            if (node.title.indexOf(searchValue) !== -1) {
                return true;
            }
            return false;
        },
    );
    // const newTreeData = filterSearchTree(
    //   cloneTreeDatas,
    //   (node) => {
    //     if (node.title.includes(searchValue)) {
    //       return true
    //     }
    //     return false
    //   },
    //   (node) => {
    //     // 第二层(显示左侧角色组数据)
    //     if (node.groupName) {
    //       return true
    //     }
    //     return false
    //   }
    // )
    console.log(JSON.stringify(newTreeData));
    // 打印的结果
    // [{
    //     key: '全部',
    //     title: '全部',
    //     isLeaf: false,
    //     children: [{
    //         key: '数据库',
    //         title: '数据库',
    //         isLeaf: false,
    //         children: [{
    //             key: 'mysql',
    //             title: 'mysql',
    //             isLeaf: false,
    //             children: [{
    //                 key: '137',
    //                 title: 'QPS',
    //                 isLeaf: true,
    //                 children: null,
    //             }],
    //         }, {
    //             key: '166',
    //             title: 'SQL',
    //             isLeaf: true,
    //             children: null,
    //         }],
    //     }],
    // }];
    
    
  • 您还可以看一下 黄菊华老师的微信小程序前端程序设计和JS入门到精通课程中的 微信小程序入门到就业课(全栈课)学习说明【建议看下】小节, 巩固相关知识点