在数组中查找交换值
Find swapped values in array
假设给定了 2 个包含相同值的数组,并且已知一次只能交换 2 个值。
originalArray = [ "i0w66c25", "vnc1ar7f", "ajo3u8xl", "i13kn0bs" ]
sortedArray = [ "vnc1ar7f", "i0w66c25", "ajo3u8xl", "i13kn0bs" ]
第一个数组是原始数组,后面是排序后的版本。
如您所见,前两个值在后一个版本中已交换。
您如何检测并return哪些值已更改,例如:(或者如果您有更好的想法,请继续!)
[
{
"changedWhat": "vnc1ar7f",
"oldPosition": 1,
"newPosition": 0
}
{
"changedWhat": "i0w66c25",
"oldPosition": 0,
"newPosition": 1
}
]
注意:这仅在数组中没有重复值时有效
originalArray = [ "i0w66c25", "vnc1ar7f", "ajo3u8xl", "i13kn0bs" ]
sortedArray = [ "vnc1ar7f", "i0w66c25", "ajo3u8xl", "i13kn0bs" ]
var original = {}
var changes = []
originalArray.forEach(function(val,pos){original[val] = pos}) // we store original array indices of the values
sortedArray.forEach(function(val,pos){
if(original[val] != pos){ // if position changed
changes.push({changed:val, oldPos:original[val],newPos:pos})
}
})
console.log(changes)
这是假设两个数组的长度相同,不包含重复值,并且具有相同的项目
var originalArray = ["i0w66c25", "vnc1ar7f", "ajo3u8xl", "i13kn0bs"];
var sortedArray = ["vnc1ar7f", "i0w66c25", "ajo3u8xl", "i13kn0bs"];
var changedItems =
originalArray
.filter(function(item, index) {
return item != sortedArray[index]
})
.map(function(item) {
return {
"changedWhat": item,
"oldPosition": originalArray.indexOf(item),
"newPosition": sortedArray.indexOf(item)
};
});
console.log(changedItems);
首先,我们使用 filter() 来确定哪些项目确实不合适。
然后,我们 map() 将这些项目添加到自定义对象数组中。
假设给定了 2 个包含相同值的数组,并且已知一次只能交换 2 个值。
originalArray = [ "i0w66c25", "vnc1ar7f", "ajo3u8xl", "i13kn0bs" ]
sortedArray = [ "vnc1ar7f", "i0w66c25", "ajo3u8xl", "i13kn0bs" ]
第一个数组是原始数组,后面是排序后的版本。
如您所见,前两个值在后一个版本中已交换。
您如何检测并return哪些值已更改,例如:(或者如果您有更好的想法,请继续!)
[
{
"changedWhat": "vnc1ar7f",
"oldPosition": 1,
"newPosition": 0
}
{
"changedWhat": "i0w66c25",
"oldPosition": 0,
"newPosition": 1
}
]
注意:这仅在数组中没有重复值时有效
originalArray = [ "i0w66c25", "vnc1ar7f", "ajo3u8xl", "i13kn0bs" ]
sortedArray = [ "vnc1ar7f", "i0w66c25", "ajo3u8xl", "i13kn0bs" ]
var original = {}
var changes = []
originalArray.forEach(function(val,pos){original[val] = pos}) // we store original array indices of the values
sortedArray.forEach(function(val,pos){
if(original[val] != pos){ // if position changed
changes.push({changed:val, oldPos:original[val],newPos:pos})
}
})
console.log(changes)
这是假设两个数组的长度相同,不包含重复值,并且具有相同的项目
var originalArray = ["i0w66c25", "vnc1ar7f", "ajo3u8xl", "i13kn0bs"];
var sortedArray = ["vnc1ar7f", "i0w66c25", "ajo3u8xl", "i13kn0bs"];
var changedItems =
originalArray
.filter(function(item, index) {
return item != sortedArray[index]
})
.map(function(item) {
return {
"changedWhat": item,
"oldPosition": originalArray.indexOf(item),
"newPosition": sortedArray.indexOf(item)
};
});
console.log(changedItems);
首先,我们使用 filter() 来确定哪些项目确实不合适。
然后,我们 map() 将这些项目添加到自定义对象数组中。