小编Wot*_*els的帖子

forEach()是否通过引用绑定?

var arr = ['Foo'];

arr.forEach(function(item){
  console.log(item);
  item = 'Lorem';
  console.dir(arr[0]);

});

for (var item in arr){
  arr[item] = 'Ipsum';
  console.dir(arr[0]);
}
Run Code Online (Sandbox Code Playgroud)

与上面的代码一样,我注意到更改传递给回调的项的值forEach()不会导致迭代对象发生更改.

for...in肯定使用.

为什么这样?我应该如何改变数组中的值?

我发现MDN上的主题很容易混淆

javascript foreach pass-by-reference

9
推荐指数
3
解决办法
6096
查看次数

提高文本处理的性能

我编写了一个程序,指示文本中所需单词类的所有实例.我是这样做的:

  • 从整个文本中创建一个单词数组

  • 迭代这个数组.对于每个单词,看看它的第一个字母是什么.

    • 跳转到所选单词类(例如"S")的所有单词的对象中的相应数组并迭代它.如果找到该单词则中断并将其推入匹配数组中.
  • 检查完所有单词后,迭代匹配数组并突出显示文本中的每个单词.

包含240000个单词的文本在100秒内处理有关名词的事项,约4.5秒处理关于我机器上的介词.

我正在寻找一种提高性能的方法,这些是我能提出的想法:

  • 重新排列我的单词列表的每个块中的项目.对它们进行排序,如果单词以人声开头,所有将辅音作为第二个字符的项目首先出现,反之亦然.(假设双声或辅音的词很少见)
  • 将文本结构化为章节并仅处理当前显示的章节.

那些坚实的想法是否有更多的想法或经过验证的技术来改进这种处理?

javascript performance text process

8
推荐指数
2
解决办法
298
查看次数

获取.html()和.text()中突出显示的文本位置

我使用以下脚本来获取突出显示的文本的位置:

function getSelectionCharOffsetsWithin(element) {
    var start = 0, end = 0;
    var sel, range, priorRange;
    if (typeof window.getSelection != "undefined") {
        range = window.getSelection().getRangeAt(0);
        priorRange = range.cloneRange();
        priorRange.selectNodeContents(element);
        priorRange.setEnd(range.startContainer, range.startOffset);
        start = priorRange.toString().length;
        end = start + range.toString().length;
    } else if (typeof document.selection != "undefined" &&
        (sel = document.selection).type != "Control") {
        range = sel.createRange();
        priorRange = document.body.createTextRange();
        priorRange.moveToElementText(element);
        priorRange.setEndPoint("EndToStart", range);
        start = priorRange.text.length;
        end = start + range.text.length;
    }
    return {
        start: start,
        end: end
    };
  }

function alertSelection() …
Run Code Online (Sandbox Code Playgroud)

javascript string jquery text

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

使用变量作为jQuery类选择器

我知道这个问题在stackoverflow上已经多次回答,但我无法让它解决我的问题.

我想要做的是,当<label>单击a时,检查标签类并将所有匹配的元素更改为backgroundColor : #000000

这是我的代码:

$(function() {
    $('label').click(function(){
        var group = this.className ;
        $('label .'+group).css({
            'backgroundColor'   : '#000000'
        })  ;
    })  ;
});
Run Code Online (Sandbox Code Playgroud)

不幸的是,这没有任何作用.它甚至不会抛出任何错误.我的错在哪里?

我不得不删除选择器中的空格:

$('label.'+group)
Run Code Online (Sandbox Code Playgroud)

jquery jquery-selectors

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

AngularJS - 在触发控制器时获取以前的路线

Angular的内部结构让我感到困惑.

我需要在加载特定视图时确定以前的路由.

这就是我做到的

app.controller('TrashCtrl',function($scope,$rootScope){

    $rootScope.$on('$locationChangeSuccess',function(evt, absNewUrl, absOldUrl) {

        var hashIndex = absOldUrl.indexOf('#');

        var oldRoute = absOldUrl.substr(hashIndex + 2);

        console.log(oldRoute);

    });

});
Run Code Online (Sandbox Code Playgroud)

不幸的是,在逻辑开始工作之前,我必须调用与该控制器对应的视图.控制器第一次触发时,不记录任何内容.此外,在此初始加载之后,应用程序将记录每个 routesChange,即使加载的视图不起作用TrashCtrl

我希望这样:

  • 当加载视图Trash(其控制器TrashCtrl)时,我需要先前的路由或空字符串(如果这是第一个).
  • 如果只在实际trash路线被调用时触发,而不是在每个路径变换上,那将是很好的.

如何实现这一目标?

编辑:

请注意,我知道可以创建自定义服务并将每个更改写入其中.这不是我想要的.我想仅在需要时才对数据进行处理,例如只在Trash被调用时.

routes angularjs

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

为什么删除后数组的长度仍为非零?

我有以下代码输出数组的长度,删除它,然后输出新的长度:

console.log($scope.adviceList.activeAdvices.length); // *1*
$scope.adviceList.activeAdvices.splice(id,1); // *id is a parameter*
console.log($scope.adviceList.activeAdvices.length); // *0*

console.log($scope.adviceList.activeAdvices.length); // *1*
delete $scope.adviceList.activeAdvices[id];
console.log($scope.adviceList.activeAdvices.length); // *0*
console.log($scope.adviceList.activeAdvices); // *[]*
Run Code Online (Sandbox Code Playgroud)

删除后,数组正确显示为空.然而,它的长度仍然是1.

javascript arrays

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

mysql自动增量 - 删除记录后重新分配

我正在使用auto-increment为我的数据库中的每个新条目分配一个id.另外,根据当前的页面编号,我有一个php脚本,它从这个数据库中选择了10个.例如,如果当前页面为2,则脚本应选择id = 20和id = 29之间的每个条目.

现在,如果我删除一个条目,id就会丢失.因此,当id28被删除时,脚本将仅显示9次委托.

有没有办法auto-increment在删除e记录后重新分配值?

php sql auto-increment

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

应该在JavaScript中使用setter/getter方法

首先,这可能是基于主要观点的,所以我正在寻找技术原因普遍接受的最佳实践来做一件事或另一件事.

如果我写一个"类"并创建它的成员,我可以像这样访问实例属性

function MyClass(){

  var self = this;

  self.foo = 'bar'

}   

var instance = new MyClass();

instance.foo = '420';
Run Code Online (Sandbox Code Playgroud)

但是,我也可以创建一个设置属性的方法,这样就不需要了解所需类的内部结构

MyClass.prototype.setFoo = function(prop){
  this.foo = prop;
};
Run Code Online (Sandbox Code Playgroud)

考虑到专业发展,是否有理由偏好另一种变体?

javascript oop

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

为什么chrome会为h*元素添加特定属性?

我想知道为什么Chrome会将样式属性添加到<h>家族的标题元素中.当我添加这样的元素,并且没有特定的css标记时,chrome会添加以下内容:

h3 {
display: block;
font-size: 1.17em;
-webkit-margin-before: 1em;
-webkit-margin-after: 1em;
-webkit-margin-start: 0px;
-webkit-margin-end: 0px;
font-weight: bold;
}
Run Code Online (Sandbox Code Playgroud)

我必须用类似的东西覆盖它

h3{
    display: block;
    font-size: 1.2em;
    -webkit-margin-before: 0;
    -webkit-margin-after: 0;
    -webkit-margin-start: 0;
    -webkit-margin-end: 0;
    cursor: default;
    font-weight: normal;
}
Run Code Online (Sandbox Code Playgroud)

好吧,我可以接受他们将它设置为粗体并增加字体大小的部分,但为什么他们会改变边距呢?

我有时会觉得这很混乱,因为我重新安排了所说的元素,并想知道为什么行为<p><h>因为我忘了这个而不同.

或者只是我,我错过了重要的部分?

请原谅我的英语,尽我所能.

css google-chrome

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

如果之前没有调用另一个方法,如何防止调用该方法

我现在和C#一起工作了三天,请原谅我的无聊问题.

我正在尝试构建一个自己的数据库类,其中包含sendig select-statements的方法.

如何connect()在对象之前未调用时阻止调用此方法?我想到了一个简单的布尔变量,但在我看来,这是一个非常难看的解决方案.

c#

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