问这个问题似乎很愚蠢,但是我从PHP转移到javascript有点麻烦,用2个数组(原始值和另一个新值)很难。
我需要对所有删除的值(运行某些功能)和添加的所有 new 值采取行动。
到目前为止,这是我想到的,但这似乎并不正确。
// new values
var array1 = [ 'aaaa', 'R26i9vjDHE', 'bbbbb' ];
// original values
var array2 = [ 'U8G5AQVsX6', 'R26i9vjDHE', '7IkuofIHEu','aaaa'];
for (var i = 0; i < array2.length; i++) {
if(array1.indexOf(array2[i]) != -1) {
console.log('in new already?');
console.log(array2[i])
// do something with new inserted value
} else {
console.log('removed items');
console.log(array2[i])
// do something with a removed value
}
}
我习惯于循环使用php的in_array或其他各种php工具箱项目。
建议?
答案 0 :(得分:0)
我们仅定义“添加”和“删除”的含义:
new
数组中添加:但在original
中不是。original
中,但在new
数组中不是 。我们可以使用2个for循环来确定这两种类型的元素:
let original_array = ['abc', 'def', 'ghi'];
let new_array = ['def', 'jkl', 'mno'];
for (let i = 0; i < new_array.length; i++){
if (!original_array.includes(new_array[i])){
console.log(new_array[i], 'has been added');
//further actions...
}
}
for (let i = 0; i < original_array.length; i++){
if (!new_array.includes(original_array[i])){
console.log(original_array[i], 'has been removed');
//further actions...
}
}
答案 1 :(得分:0)
因此,已删除的元素将在array2
中,但不会在array1
中,然后添加的元素将在array1
中,但不会在array2
中。因此,要检测这两种情况,您需要遍历两个数组。您可以做类似的事情
var i;
for (i = 0; i < array2.length; i++) {
if (array1.indexOf(array2[i]) === -1) {
//item removed from array2
console.log(array2[i] + ' removed');
}
}
for (i = 0; i < array1.length; i++) {
if (array2.indexOf(array1[i]) === -1) {
//item added to array1
console.log(array1[i] + ' added');
}
}
然后在检测到每种情况时采取适当的措施。
答案 2 :(得分:0)
这应该做到:
function compute(original, modified, addedCB, removedCB) {
for (let i of modified) {
if (!original.includes(i)) {
// this is a new value
addedCB(i);
}
}
for (let i of original) {
if (!modified.includes(i)) {
// the modified array doesn't include this value
removedCB(i);
}
}
}
答案 3 :(得分:0)
您可以使用JavaScript的array.includes
来接近PHP的in_array
。您可以使用它来filter
有问题的数组:
这比在for
循环中执行所有操作要慢一点,但也更简洁明了(IMO):
// new values
var array1 = [ 'aaaa', 'R26i9vjDHE', 'bbbbb' ];
// original values
var array2 = [ 'U8G5AQVsX6', 'R26i9vjDHE', '7IkuofIHEu','aaaa'];
// in array1 but not in array2
let not_in_array2 = array1.filter(item => !array2.includes(item))
// in array2 but not in array1
let not_in_array1 = array2.filter(item => !array1.includes(item))
// in both arrays
let inBoth = array1.filter(item => array2.includes(item))
console.log("Not in array1:", not_in_array1)
console.log("Not in array2:", not_in_array2)
console.log("In both:", inBoth)
您可以在其中forEach()
或map()
查看结果并应用所需的任何功能。