小编Yon*_*uan的帖子

JSDoc:如何记录混合了动态和固定属性的对象?

假设我有一个像这样的函数:

function validator(obj){
  const ret = {};

  for (const key in obj){
    // Returns a boolean
    result = validate(key, obj[key]);

    if (result !== true)
      ret.error = true;

    ret[key] = result;
  }

  return ret;
}
Run Code Online (Sandbox Code Playgroud)

这个函数将返回一个对象,对象的内容根据传递给函数的参数动态填充。

我可以像这样记录函数:

/**
 * @param {Object.<string, *>} obj
 * @returns {Object.<string, boolean>}
 */
Run Code Online (Sandbox Code Playgroud)

但它没有记录.error也将返回布尔值的动态属性。

如果它会返回,我可以简单地写:

/**
 * @param {Object.<string, *>} obj
 * @returns {{error: boolean}}
 */
Run Code Online (Sandbox Code Playgroud)

但是现在它没有记录动态属性。

我能想到的事情是这样的:

/**
 * @param {Object.<string, *>} obj
 * @returns {Object.<string, boolean>|{error: boolean}}
 */
Run Code Online (Sandbox Code Playgroud)

虽然它有效,但在我看来它在语法上并不正确。我不能使用,@typedef因为当我已经知道将使用什么属性时应该使用它。

我在 …

javascript comments jsdoc

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

javascript按最接近的开始日期时间排序,以显示到最远的日期和另一个属性

我必须根据具有多个属性的当前日期时间,按照开始日期时间进行排序。例如,我有以下列表:

<ul>
    <li data-startDate="09-04-2019 15:00" data-inplay=false>Name1</li>
    <li data-startDate="09-04-2019 15:30" data-inplay=false>Name2</li>
    <li data-startDate="09-04-2019 15:20" data-inplay=false>Name3</li>
    <li data-startDate="09-04-2019 16:00" data-inplay=false>Name4</li>
    <li data-startDate="09-04-2019 15:00" data-inplay=true> Name5</li>
    <li data-startDate="09-04-2019 15:10" data-inplay=false>Name6</li>
    <li data-startDate="09-04-2019 15:05" data-inplay=true> Name7</li>
    <li data-startDate="08-04-2019 12:05" data-inplay=false>Name8</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

当前日期时间为09-04-2019 15:15,所需的输出应为:

<ul>
    <li data-startDate="09-04-2019 15:00" data-inplay=false>Name1</li>
    <li data-startDate="09-04-2019 15:30" data-inplay=false>Name2</li>
    <li data-startDate="09-04-2019 15:20" data-inplay=false>Name3</li>
    <li data-startDate="09-04-2019 16:00" data-inplay=false>Name4</li>
    <li data-startDate="09-04-2019 15:00" data-inplay=true> Name5</li>
    <li data-startDate="09-04-2019 15:10" data-inplay=false>Name6</li>
    <li data-startDate="09-04-2019 15:05" data-inplay=true> Name7</li>
    <li data-startDate="08-04-2019 12:05" data-inplay=false>Name8</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我尝试过此方法,但不包含游戏内参数,而且排序也不正确

var list = $("ul …
Run Code Online (Sandbox Code Playgroud)

javascript sorting

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

Webpack:如何直接导出到包含样式表导入的全局(不带.default)?

语境

\n

我有一个webpack.config.js这样的:

\n
/* Something here */\n\nmodule.exports = {\n  entry: {\n    main: './src/index.js'\n  },\n  output: {\n    library: 'MyClass',\n    libraryTarget: 'umd',\n    path: path.resolve(__dirname, 'lib'),\n    filename: `package.js`\n  },\n  ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我的./src/index.js看起来像这样:

\n
import MyClass from 'src/myClass'\nimport 'src/myStyle.css'\n\nexport default MyClass\n
Run Code Online (Sandbox Code Playgroud)\n

问题

\n

虽然这工作正常,但它将MyClass类暴露给window对象:

\n
console.log(window.MyClass)\n=> Module {default: \xc6\x92, __esModule: true, Symbol(Symbol.toStringTag): "Module"}\n
Run Code Online (Sandbox Code Playgroud)\n

这样,我就无法使用以下方式调用我的类:

\n
new MyClass();\n=> TypeError: MyClass is not a constructor\n
Run Code Online (Sandbox Code Playgroud)\n

我必须像这样调用它:

\n
new MyClass.default();\n=> MyClass { ... }\n
Run Code Online (Sandbox Code Playgroud)\n …

javascript webpack

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

与手动 Typescript 声明文件一起使用时,VS Code 智能感知不会自动建议

给定此代码,例如:

// src/index.ts
export function hello(props: {
  type: 'boolean';
  params: {
    bool: boolean;
  }
}): void;
export function hello(props: {
  type: 'string';
  params: {
    str: string;
    num: number;
  }
}): void;
export function hello(props: {
  type?: any;
  params?: any;
}): void {
  console.log(props);
}


// index.ts
import { hello } from './src';

hello({
  type: 'string',  /* autosuggests 'string' and 'boolean' */
  params: {
    /* autosuggests `str` and `num` (not `bool`) as property options, which is correct and expected */
  } …
Run Code Online (Sandbox Code Playgroud)

intellisense typescript visual-studio-code typescript-typings

6
推荐指数
0
解决办法
164
查看次数

document.getElementsByTagName('*') 无法识别 SVG 标签并给出控制台错误

问题很简单,document.getElementsByTagName('*')没有选择 SVG 标签,并且在控制台中出现错误。

但是,如果我删除了 SVG 标签,则可以正常工作。

我的代码:

var Master = document.getElementsByTagName('*');

/* NOT WORKING TOO 
var Master = document.getElementsByTagName('body')[0].getElementsByTagName('*');
var Master = document.querySelectorAll('*');
*/

var Vector = [];

for (var i=0; i < Master.length; i++){
  Master[i].className = Master[i].className.trim();
  console.log("Class > " + Master[i].className);
  if (Master[i].className != ""){
    var chaps = Master[i].className.split(/\s+/);
    for (var j=0; j < chaps.length; j++){
      Vector.push(chaps[j]);
    }
  }
}

//console.log(Vector);
Run Code Online (Sandbox Code Playgroud)
<section class="classMaster">
  <h1 class="title-1"><b>Title:</b> Anyone</h1>
  <h2 class="title-2">Title T2</h2>
  <p class="parrafe"><b>Strong:</b> Year 2019.<p/>
  <p class="parrafe"><b>Text:</b> Everybody.</p> …
Run Code Online (Sandbox Code Playgroud)

javascript dom

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

如何使用扩展语法或解构为“this”值?

我知道我们可以这样做:

const a = { b: 1, c: 2 }

const A = { ...a };
// A { b: 1, c: 2 }
Run Code Online (Sandbox Code Playgroud)

但是我们如何使用这种方法将数据传递为this值呢?

例如我们有一个class A {}并且想要动态地将对象属性设置为this. 通常的方法是使用Object.defineProperties可能for...in循环:

const a = { b: 1, c: 2 }

class A {
  constructor(obj){
    for (const k in obj)
      Object.defineProperty(this, k, { value: obj[k] });
  }
}

new A(a);
// A { b: 1, c: 2 }
Run Code Online (Sandbox Code Playgroud)

所以我在想,既然我们现在有了语法糖,我们如何将它用于上面的例子?

编辑

我在这里谈论扩展运算符语法 …

javascript code-structure ecmascript-6

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

如何计算多个数组的总和?

我正在尝试解决一个方程,在该方程中,我从索引后的数组列表中添加数字。

列表的每个数组都是随机生成的 4 个数字的固定长度数组,如下所示:

const list = [
  [2, 9, 1, 2],
  [2, 3, 9, 4],
  [4, 7, 8, 1]
]
Run Code Online (Sandbox Code Playgroud)

所以我想要做的是从每个数组中获取每个索引的每个数字的总和。像这样:

const list = [
  [2, 9, 1, 2],
  [2, 3, 9, 4],
  [4, 7, 8, 1]
]

// expectedResult = [8, 19, 18, 7];
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

javascript arrays math

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

JavaScript使用随机数对每个方程式使用Select运算符使用随机数生成问题

我想做一个数学游戏,随机生成数字和运算符。

这是提示- x = Math.floor(Math.random()*101);将生成一个0到100之间的随机数。(+,*,-)为每个方程式随机选择运算符。请任何人可以帮助我。

var arr = []
while(arr.length < 8){
    var r = Math.floor(Math.random()*100) + 1;
    if(arr.indexOf(r) === -1) arr.push(r);
}
document.write(arr);
Run Code Online (Sandbox Code Playgroud)

javascript

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