Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.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 获取在对象文本中定义的符号值,并迭代其值_Javascript_Node.js_Sequelize.js - Fatal编程技术网

Javascript 获取在对象文本中定义的符号值,并迭代其值

Javascript 获取在对象文本中定义的符号值,并迭代其值,javascript,node.js,sequelize.js,Javascript,Node.js,Sequelize.js,我有一个对象文字,如下所示 { is_active: true, start_date: { [Symbol(lt)]: 2020-02-24T12:56:36.780Z }, expiry_date: { [Symbol(gt)]: 2020-02-24T12:56:36.780Z }, [Symbol(or)]: [ { user_id: 'M' }, { user_id: null } ] } 这些对象在查询数据库之前由sequelize自动生成 我需要遍历所有对象键,并

我有一个对象文字,如下所示

{
  is_active: true,
  start_date: { [Symbol(lt)]: 2020-02-24T12:56:36.780Z },
  expiry_date: { [Symbol(gt)]: 2020-02-24T12:56:36.780Z },
  [Symbol(or)]: [ { user_id: 'M' }, { user_id: null } ]
}
这些对象在查询数据库之前由sequelize自动生成

我需要遍历所有对象键,并更改该键的值,该键为
id
或以
\u id
结尾
这是我第一次使用符号数据类型。我读过一篇文章,上面说它们不能在中使用
for…或
对象…键

我也读了一个答案,但它只说了如何访问它。
下面是我的函数,它递归遍历对象并解密
id
和以
\u id

结尾的密钥值

   function decryptIds(obj) {
          if (typeof obj === 'object' && obj !== null) {
            for (let key in obj) {
              if (Array.isArray(obj[key])) {
                for(let i = 0; i< obj[key].length; i++) {
                  if(typeof obj[key][i] === 'object' && obj[key][i] !==null)
                    decryptIds(obj[key][i].where)
                  else 
                    obj[key][i] = decrypt(obj[key][i])
                }
              } else if (typeof obj[key] === 'object' && obj !== null) {
                decryptIds(obj[key].where)
              }
              else if (key === 'id' || key.endsWith('_id')) {
                obj[key] = decrypt(obj[key])
              }
            }
          }
          return
        }
        decryptIds(model.where)
函数解密ID(obj){
如果(对象的类型=='object'&&obj!==null){
用于(输入obj){
if(Array.isArray(obj[key])){
for(设i=0;i
不知怎的,我成功地做到了。我知道这不是解决方案,它很容易可行。我会继续努力,直到找到更好的方法。现在还可以

      beforeFind: (model, options) => {
        function decryptIds(obj) {
          if(typeof obj === 'object' && obj!==snull &&Object.getOwnPropertySymbols(obj)) {
            const objectSymbols = obj[Object.getOwnPropertySymbols(obj)[0]]
            if(objectSymbols) {
              objectSymbols.forEach(el => {
                decryptIds(el)
              })
            }
          }
          if (typeof obj === 'object' && obj !== null) {
            for (let key in obj) {
              if (Array.isArray(obj[key])) {
                for(let i = 0; i< obj[key].length; i++) {
                  if(typeof obj[key][i] === 'object' && obj[key][i] !==null)
                    decryptIds(obj[key][i].where)
                  else 
                    obj[key][i] = decrypt(obj[key][i])
                }
              }
              else if (key === 'id' || key.endsWith('_id')) {
                if(obj[key]) {
                  obj[key] = decrypt(obj[key])
                }
              } else if (typeof obj[key] === 'object' && obj !== null) {
              decryptIds(obj[key].where)
            }
            }
          }
          return
        }
        console.log(model.where)
        decryptIds(model.where)
        console.log(model.where)
      },
beforeFind:(模型,选项)=>{
函数ID(obj){
if(typeof obj==='object'&&obj!==snall&&object.getOwnPropertySymbols(obj)){
const objectSymbols=obj[Object.getOwnPropertySymbols(obj)[0]]
if(对象符号){
objectSymbols.forEach(el=>{
解密ID(el)
})
}
}
如果(对象的类型=='object'&&obj!==null){
用于(输入obj){
if(Array.isArray(obj[key])){
for(设i=0;i
为什么不使用诸如
等s/t iterable作为键?@NinaScholz抱歉,我没有放太多信息,不过我会更新。这些对象在查询数据库之前由sequelize自身自动生成。所以我不能改变它们。符号的目的之一是明确禁止这个用例——如果你正在构造查询,在得到符号化的结果之前进行修改。