小编kee*_*han的帖子

检查对象数组是否包含某些键

我需要确定某个键是否存在于对象数组中。

这是一个示例数组:

arrOfObj = [{
        "mainKey1": {
            "subKey1": {
                "innerKey1": {
                    "innerMostKey1": {
                        "key1": "value"
                    }
                }
            }
        }
    }, {
        "mainKey2": {
            "key2": "value"
        }
    }, {
        "mainKey3": {
            "subKey3": {
                "key3": "value"
            }
        }
    }
]
Run Code Online (Sandbox Code Playgroud)

我试图这样做,但我得到了错误的输出:

const objKeys = Object.keys(arrOfObj)
console.log('objKeys = ' + JSON.stringify(arrOfObj))
Run Code Online (Sandbox Code Playgroud)

输出是索引号:

objKeys = ["0", "1", "2"]
Run Code Online (Sandbox Code Playgroud)

我想要一个像这样工作的函数:

var isKeyPresent = checkKeyPresenceInArray('mainKey3')
Run Code Online (Sandbox Code Playgroud)

请注意,我只需要检查对象中的最顶层 - 在上面的示例中,这些是主键(mainKey1等)并且它们的内容是动态的(其他一些在内部具有深度嵌套的对象,有些则不然。

帮助!

javascript arrays json object node.js

7
推荐指数
1
解决办法
4319
查看次数

唯一指针的 Memset

我正在将 C 代码转换为 C++。

有矩阵指针:

MATRIX* matrix = NULL;
matrix = new MATRIX[256];

if (matrix == NULL)
   return FAIL;
memset(matrix, 0, 256*sizeof(MATRIX));

Run Code Online (Sandbox Code Playgroud)

然后用不同的方法填充它:

fillUpMatrix(matrix);
Run Code Online (Sandbox Code Playgroud)

在 fillUpMatrix() 中:

memcpy(&matrix[start], &someOtherMatrix[pos], sizeof(MATRIX));
Run Code Online (Sandbox Code Playgroud)

后来 memset 被调用来获取指针,因为它将用一组不同的值填充:

memset(matrix, 0, 256*sizeof(MATRIX));
Run Code Online (Sandbox Code Playgroud)

所以我所做的是:

auto matrix= std::make_unique<MATRIX[]>(256);
fillUpMatrix(matrix.get());
Run Code Online (Sandbox Code Playgroud)

我跳过了第一个,memset因为我相信智能指针不再需要它了。但是memset我认为需要第二个(因为将保存新值)。那么我如何在 C++ 中编写它并考虑到我使用的是智能指针?我上面的转换正确吗?

c++ smart-pointers

6
推荐指数
1
解决办法
1116
查看次数

Q-Tree - 展开和折叠节点非常慢

我有一个加载了大量数据的 q 树(> 1000 个节点,嵌套 5 层或更多层)。它加载得很好,但是当我执行 时expandAll(),一切都变得非常非常慢。

尝试了以下方法,它得到了一些改进,但仍然很慢:

  • 深度冷冻物体
  • 使用q-virtual-scroll(不确定这是否正确完成,因为它只支持itemsand tables)
  • duration将prop设置为1
  • no-connectors使用道具移除连接器
  • 禁用QSlideTransition(我QTree.js内部修改) - 帮助很大

所以在调试过程中,我注意到以下几点:

  • 当尝试展开/折叠节点时,会识别单击,但 Quasar Q-Tree 会重新渲染整个树(每次单击节点时都会迭代整个树 - 由于节点数据庞大,这需要一段时间 __getChildren())__getNode()
    • 因此,为了实现我想要的(跳过/不要重复地重新迭代 和__getChildren())__getNode()- 我尝试将之前渲染的组件保存在__getNode()下面的代码中。但是这样一来,单击的节点就不再扩展了——知道如何才能实现我想要的吗?如果可能的话?
__getNode (h, node) {
   // Check if we have a pre-saved rendered output, return it if so
   if (this.outputArray?.[node?.nodeId]) {
      return this.outputArray[node.nodeId]
   }

   // ... a chunk of code goes …
Run Code Online (Sandbox Code Playgroud)

javascript node.js vue.js quasar-framework

5
推荐指数
0
解决办法
1395
查看次数

将 var 转换为 const javascript

是否可以将 var 转换为 const?

在这样的场景中说:

var appname = ''

function setAppName(name) {
   appname = name  // can I convert this to const now?
}
Run Code Online (Sandbox Code Playgroud)

基本上,这是针对参数级别的。参数需要在整个文件中都可以访问,我想在第一次赋值后将其设置为 const。这可能吗?

添加:如果除了创建包含此参数的对象之外还有其他任何方法,那会更好(对于更直接的解决方案)。我将处理这样的多个参数,冻结一个对象将导致整个对象冻结。我希望在参数级别上做到这一点。

因此,要么将参数更改为 const。或(我认为这是不可能的)将参数的范围更改为全局:

function setAppName(name) {
   const appname = name  // can I change the scope and make this global?
}
Run Code Online (Sandbox Code Playgroud)

谢谢。

javascript node.js

4
推荐指数
2
解决办法
1316
查看次数

为发出事件添加附加参数 - Quasar

我正在使用 Quasar 框架。并想在框架组件的预设上添加第三个参数。


这是针对Q-popup-edit的save/cancel事件:

句法:

@save->function(value, initialValue)

描述

当值已成功验证且应保存时发出

参数:

value- 要保存的验证值

initialValue- 更改前的初始值


有没有办法让我不必指定“新”和“旧”值而只需传递第三个参数? @save="saved(.., .., arg3)"或类似的东西@cancel="canceled(arg3)"。如果这是不可能的,那么我如何传递初始值和新值?

<q-popup-edit buttons lazy-rule v-model="props.row.value" @save=(newValue, initialValue, arg3)? 
Run Code Online (Sandbox Code Playgroud)
...
methods: {
  saved (val, initialValue, arg3) {
    console.log(`original value = ${initialValue}, new value = ${val}`)
    console.log('argument3 = ' + arg3)
  },
  canceled (val, initialValue, arg3) {
    console.log(`retain original value = ${initialValue}, canceled value = ${val}`)  
    console.log('argument3 = ' + arg3)
  } …
Run Code Online (Sandbox Code Playgroud)

node.js vue.js quasar-framework

3
推荐指数
1
解决办法
1858
查看次数

从变量(从导入的 JS)获取字符串作为对象中的键

如何使变量成为对象的键?

我从definitions.js 导入常量,并且需要将这些常量用作键:

import * as cons from '../scripts/definitions.js'

export default {
  data () {
    return {
      cons: cons,
      obj: {
        cons.FILENAMEA: {},
        cons.FILENAMEB: {
          children: [
            cons.CHILDFILENAME1,
            cons.CHILDFILENAME2,
            cons.CHILDFILENAME3
          ]
        }
      }
    }
  },
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,我收到错误:

Parsing error: Unexpected token, expected ","
Run Code Online (Sandbox Code Playgroud)

因为 . 中的点(.)cons.FILENAMEA。这个怎么做??请注意,我需要从外部文件获取这些变量/常量。不可能只在同一个文件中声明它。

谢谢!

javascript json object node.js vue.js

3
推荐指数
1
解决办法
800
查看次数

使用memcpy从原始指针复制到智能指针

我正在尝试将旧式C代码转换为使用智能指针。并遇到了以下内容(只是片段,让我开始学习):

MATRIX* cache;
---
cache = new MATRIX[numRow*numCol];
if (cache == NULL) 
{
    return FAIL;
}
---
memset(cache, 0, sizeof(MATRIX)*numRow*numCol);
---
memcpy(cache, matrix, sizeof(MATRIX)*numRow*numCol);
Run Code Online (Sandbox Code Playgroud)

我试图将它们转换成这样:

std::unique_ptr<MATRIX[]> cache;
---
cache = std::make_unique<MATRIX[]>(numRow*numCol);
if (cache == NULL) 
{
    return FAIL;
}
---
cache.reset();
Run Code Online (Sandbox Code Playgroud)

它是否正确?还有更好的写法吗?另外,我不知道该怎么办了memcpyC ++的对手

memcpy(cache, matrix, sizeof(MATRIX)*numRow*numCol);
Run Code Online (Sandbox Code Playgroud)

matrix只是MATRIX *类型的原始指针。有什么建议么??非常感谢!

c++ smart-pointers

2
推荐指数
1
解决办法
153
查看次数

使用子字符串替换cmd中的文本

我需要打开一个文件并搜索子字符串。然后替换同一行的其他文本。

必须搜索文本:#define MyAppVersion并替换双引号内的版本(这是动态的,将从不同的文件中获取)。

#define MyAppVersion "1.0.0"
Run Code Online (Sandbox Code Playgroud)

所以这就是我目前所拥有的:

rem version num to be retrieved elsewhere, set here for simplicity on sample
set VER=1.1.0
powershell -Command "(gc sample.iss) -replace '#define MyAppVersion', '#define MyAppVersion "%VER%"' | Out-File sample.iss"
Run Code Online (Sandbox Code Playgroud)

但这只会输出这样的结果:

#define MyAppVersion 1.1.0 "1.0.0"
Run Code Online (Sandbox Code Playgroud)

那么如何在不使用任何第三方插件的情况下更改整行?

谢谢!

powershell cmd batch-file

2
推荐指数
1
解决办法
52
查看次数

导出多个Vue组件

我正在使用 Vue SFC 组件创建一个 node_module ,以供不同项目使用。

所以在我的模块的index.js(主入口点)上,我有这个:

import component1 from './src/input-box1.vue'
import component2 from './src/input-box2.vue'

export default component1
Run Code Online (Sandbox Code Playgroud)

上面的效果很好,component1但我不知道如何导出component2。

我尝试这样做:

export { component1 }
export { component2 }
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误:

Unknown custom element: <component1> - did you register the component correctly? For recursive components, make sure to provide the "name" option
Run Code Online (Sandbox Code Playgroud)

导入是这样的:

import component1 from 'sample-vue-components'
Run Code Online (Sandbox Code Playgroud)

有任何想法吗??

vue.js vue-component vuejs2

2
推荐指数
1
解决办法
4641
查看次数

Vue.js - v-for 仅打印对象名称

我有一个嵌套对象,只想打印对象名称。我如何在 vue.js 中做到这一点?

var object1 = {
  'obj1' : {
    'obj1a' : 'a',
    'obj1b' : 'b'
  },
  'obj2' : {
    'obj2c' : 'c',
    'obj2d' : 'd'
  }
}
Run Code Online (Sandbox Code Playgroud)

此代码打印正在迭代的对象的全部内容:

<div v-for="obj in object1" v-bind:key="obj">
  {{ obj }}
</div>
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它只打印字符串obj1和obj2?

谢谢!

javascript vue.js vue-component vuejs2 v-for

1
推荐指数
1
解决办法
1185
查看次数