我正在寻找一种JavaScript数组插入方法,其格式为:
arr.insert(index, item)
Run Code Online (Sandbox Code Playgroud)
最好是在jQuery中,但任何JavaScript实现都会在这一点上完成.
所以我有一个通用列表,一个oldIndex
和一个newIndex
值.
我想尽可能简单地将项目移动oldIndex
到newIndex
......
有什么建议?
该项目应该在删除之前(newIndex - 1)
和newIndex
之前的项目之间结束.
可能重复:
Javascript语法:逗号是什么意思?
这种模式会回归什么?它是如何工作的?
return myfunc(), myobj.myvar = someobj.prop, myobj
我之前没有遇到过这种模式,但一直在查看Bing Maps Ajax Control并且多次注意到这种模式.
据我了解,不会返回多个值.那么这种模式有什么作用呢?什么回来了?这种模式的好处是什么?
我正在开发一个支持AJAX的asp.net应用程序.我刚刚为Array.prototype添加了一些方法
Array.prototype.doSomething = function(){
...
}
Run Code Online (Sandbox Code Playgroud)
这个解决方案对我有用,可以以"漂亮"的方式重用代码.
但是当我测试它与整个页面一起工作时,我遇到了问题.我们有一些自定义的ajax扩展器,并且它们开始表现为意外:一些控件在其内容或值周围显示"未定义".
可能是什么原因?我错过了修改标准对象原型的一些内容吗?
注意:我很确定在修改Array的原型时错误就开始了.它应该只与IE兼容.
所以我有一个对象数组;
[
{
"foo": 2,
"bar": "test"
},
{
"foo": 19,
"bar": "value"
},
{
"foo": 7,
"bar": "temp"
}
]
Run Code Online (Sandbox Code Playgroud)
我需要将具有特定值的对象移动foo
到数组的开头.值始终在对象中,但不保证对象将在数组中.
所以在运行之后moveToFront(19);
,我有以下内容:
[
{
"foo": 19,
"bar": "value"
},
{
"foo": 2,
"bar": "test"
},
{
"foo": 7,
"bar": "temp"
}
]
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
感谢@ ghemton的safeClone
方法,我已经能够在Ember.js中运行jQuery UI Sortable :Ember.js + jQuery UI Draggable Clone
一旦排序完成,我很难让Ember知道这个变化.现在,我splice
按照将数组元素从一个数组位置移动到另一个数组位置的建议使用,将集合中的项目移动到适当的位置.这工作正常,但我有窗口滚动的问题.
在这个jsfiddle,http://jsfiddle.net/chrisconley/g4aE6/,如果你滚动到底部,然后重新排序任何元素,窗口跳回到顶部.如果你把一个断点之间propertyWillChange
和propertyDidChange
,你可以看到,灰烬从视图瞬间,这是造成窗口跳回到顶端删除所有项目.
App.MySortableView = Em.CollectionView.extend({
moveItem: function(fromIndex, toIndex){
var items = this.get('content');
this.propertyWillChange('content');
item = items.splice(fromIndex, 1)[0];
items.splice(toIndex, 0, item);
this.propertyDidChange('content');
}
});
Run Code Online (Sandbox Code Playgroud)
有没有办法在没有删除和更换整个集合的情况下通知Ember?
更新方案:
(感谢Christopher Swasey的回答)
App.MySortableView = Em.CollectionView.extend({
moveItem: function(fromIndex, toIndex){
var items = this.get('content');
item = items.objectAt(fromIndex);
items.removeAt(fromIndex);
items.insertAt(toIndex, item);
}
});
Run Code Online (Sandbox Code Playgroud)
这里有完整的例子:http://jsfiddle.net/chrisconley/NN35P/
是否有任何Angular JS Tabs指令允许对它们重新排序(如浏览器的选项卡)
如果不是一个开始实施将是伟大的
<tabset>
<tab ng-repeat="tab in vm.tabs" active="tab.active" sortable-tab> </tab>
<tab disabled="true" ng-click"vm.addNewTab()" class="nonSortable-addTab-plusButton"></tab>
</tabset>
Run Code Online (Sandbox Code Playgroud)
如何让它们重新定位?
编辑:Bounty添加使用上面的原始tabset语法.
假设我Backbone.Collection
有一些简单的模型:
var Library = Backbone.Collection.extend({
model: Book
});
lib = new Library(
[Book1, Book2, Book3, Book4, Book5, Book6]
]);
Run Code Online (Sandbox Code Playgroud)
如何在集合中移动模型 - 例如第5个到第2个位置?因此,不按模型字段排序,而只是手动更改排序顺序.
注意:我简化了模型Book1, ...
.他们当然Backbone.Model
是s.
我对无序列表 (ul) 使用 jquery draggble 函数,并面临在更改后获取项目顺序并设置页面加载顺序的问题。假设我们有以下代码:
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js> </script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
<script>
$(document).ready(function(){
$('.secondblock').sortable({axis:'y'});
$(".block").sortable({
axis: 'y',
update: function(event, ui) {// order changed
var order = jQuery(this).sortable('toArray');
// set this order to .secondblock
}
});
});
</script>
</head>
<body>
<ul class="block" type="none">
<li id = "one">1</li>
<li id = "two">2</li>
<li id = "three">3</li>
<li id = "four">4</li>
<li id = "five">5</li>
</ul>
<ul class="secondblock" type="none">
<li id = "one">1</li>
<li id = "two">2</li>
<li id …
Run Code Online (Sandbox Code Playgroud) 我正在尝试找到一种方法将对象移动到数组的末尾
我有这个对象数组:
[{"id":"4","name":"Boaz"},{"id":"2","name":"Shareen"},{"id":"3","name":"Simon"},{"id":"1","name":"Miriam"}]
Run Code Online (Sandbox Code Playgroud)
假设我有一个id:3,或者一个位置:2.
有了这个我想把整套{"id":"3","name":"Simon"}移到最后
我尝试了很多东西,搜索和搜索,但我无法使它工作
考虑到我有一个如下所示的对象,其中可能有多个名称,并且“其他”可以出现在任何索引处,我如何对始终将“其他”作为第一个元素和其余名称的数组进行排序按字母顺序排序?
var friends = [
{ id: 1, name: 'Paul' },
{ id: 2, name: 'Mary' },
{ id: 3, name: 'The others' },
{ id: 4, name: 'John' }
];
Run Code Online (Sandbox Code Playgroud)
对于上面的示例数组,所需的结果将是:
[
{ id: 3, name: 'The others' },
{ id: 4, name: 'John' },
{ id: 2, name: 'Mary' },
{ id: 1, name: 'Paul' }
]
Run Code Online (Sandbox Code Playgroud) 我有一个数组
[1,2,3,4,5]
我想向右移动“2”(当时 1 个位置)或向左移动“2”
我们可以用 RxJS Operators 做到这一点吗?
问题是-
操作员不工作(在第8行).请参阅下面的代码:
array = [0,0,0,0,3,0,0,0,0],
n = 0;
for(var i = 0; i < array.length; i++){
if(n < 9){ //the "n" variable there's only for don't crash the browser with a infinite loop
if(array[i] == 3){
array[i] = 0;
array[i - 1] = 3; //I believe that here is the problem
}
}
n++;
}
console.log(array);
Run Code Online (Sandbox Code Playgroud)
所以... 我想将"3"值移动到数组的开头.但它只有在我使用+
运算符(第8行)时才有效.因此,如果我使用+
一个,"3"值将到达数组的末尾.
任何人都知道为什么-
操作员在这种情况下不工作和+
工作?