As it turns out deleting an array element is not as easy as deleting a variable; see here. The "deleted" element is not deleted but acquires an undefined value while the length of the array stays the same.
Found some helpful advice here. So, you may use array2's splice method which according to MDN handily does the following:
The splice() method changes the contents of an array by removing
existing elements and/or adding new elements.
The following snippet works irrespective of the order of the elements in each array, as follows:
var arr1 = [{
"caracname": "charles"
}, {
"caracname": "kevin"
}];
var arr2 = [{
"caracname": "charles"
}, {
"caracname": "jean"
}, {
"caracname": "kevin"
}];
var tmp1 = "",
tmp2 = "";
for (var k = 0, key = "", maxLength = arr1.length; k < maxLength; k++) {
key = Object.keys(arr1[k])[0];
for (var j = 0, maxLength_2 = arr2.length; j < maxLength_2; j++) {
tmp2 = arr2[j][key];
tmp1 = arr1[k][key];
if (tmp2 === tmp1) {
arr2.splice(j, 1);
maxLength_2--; // array2 length now one less
break;
}// end if
}// end inner-for
}// end outer-for
console.log(arr2);
I've revised this example after running the code here, altering some variable names as a result.
As an aside, you should declare your arrays with var or optionally let; more info here and here.