我有两个数组,
var original = [10,80,30,100,160];
var edited = [80,120,140,70,160,30];
从上面,
我需要比较并获取所有元素在“已编辑”的数组中出现但在“原始”中不存在的内容。
此外,
需要获取“原始”但不在“已编辑”中的元素。
所以输出应该如下,
Added Elements 120,140,70
Deleted Elements 10,100
我写的代码如下,
var fn100 = function(){
var original = [10,80,30,100,160];
var edited = [80,120,140,70,160,30];
var newlyAdded = [];
var dropped = [];
var isFound = false;
var x = 0, y = 0;
//for added
for(x = 0; x < edited.length; x++){
isFound = false;
for(y = 0; y < original.length; y++){
if(edited[x] === original[y]){
isFound = true;
break;
}
}
if(isFound === false){
newlyAdded.push(edited[x]);
}
}//for added
//for dropped
for(x = 0; x < original.length; x++){
isFound = false;
for(y = 0; y < edited.length; y++){
if(original[x] === edited[y]){
isFound = true;
break;
}
}
if(isFound === false){
dropped.push(original[x]);
}
}// for dropped
print("Added Elements "+newlyAdded);
print("Deleted Elements "+dropped);
}
fn100();
从上面的代码中你可以看到我写了两个for循环,即添加和删除。
有没有更好的逻辑呢?
请建议我。
答案 0 :(得分:2)
您可以定义这样的功能..
@Override
protected void onResume()
{
hsv.post(new Runnable()
{
@Override
public void run()
{
hsv.scrollTo(scrollX, scrollY);
}
});
}
然后只需检索添加和删除的元素即可:
Array.prototype.diff = function(a) {
return this.filter(function(i) {return a.indexOf(i) < 0;});
};
查看此link了解更多详情..
答案 1 :(得分:0)
您可以使用以下代码轻松完成此操作 -
<p>Total: PHP <span id="price">0</span></p>
另一种使用filter()函数的替代方法
var edited = [80,120,140,70,160,30];
var original = [10,80,30,100,160];
var added = $.grep(edited, function(el) { return $.inArray(el, original) == -1; }); // returns added= [120,140,70]
var deleted = $.grep(original, function(el) { return $.inArray(el, edited) == -1; }); //returns deleted = [10,100]
希望这有帮助!
答案 2 :(得分:0)
试试这个jquery函数
var original = [10, 80, 30, 100, 160];
var edited = [80, 120, 140, 70, 160, 30];
var addedElements = $(edited).not(original).get();
var droppedElements = $(original).not(edited).get();
答案 3 :(得分:0)
如果您使用underscore.js
它是一个单线。
var original = [10,80,30,100,160];
var edited = [80,120,140,70,160,30];
var dif = _.difference(original, edited);
var dif1 = _.difference( edited, original);
console.log(dif)
console.log(dif1)
工作代码here
答案 4 :(得分:0)
如果我理解你的问题,那么underscore.js会为你提供一个简单的解决方案:
http://underscorejs.org/#without
这个功能。基本上将arr1与arr2进行比较,返回所有与arr1不同的array2。如果你需要完全不同,你可以使用func 2次:
将arr1与arr2进行比较并存储它 将arr2与arr1进行比较并存储
合并结果
答案 5 :(得分:0)
有些图书馆可以做到这一点。我不知道他们使用了什么逻辑,但我可以看到更好的逻辑。
不是运行四个for循环(2x2),而是运行两个: (下面未编译,未经测试,半sudo代码)
resolve
这可能不是最好的方法,但它是更好的逻辑。
此外,javascript数组是often linked lists,因此某些功能(如拼接)并不像它们看起来那么糟糕。