下面是我的数组......
["AAA", "BBB", "CCC", "AAA", "BBB", "CCC", "AAA", "BBB", "CCC", "DDD"]
我可以做些什么来获得像[“AAA”,“BBB”,“CCC”]这样的数组
例如,如果第一个元素是“AAA”,我想在第二个“AAA”之后删除所有元素(第二个“AAA”也删除)
感谢。
答案 0 :(得分:2)
您可以使用javascript中数组的 indexOf 和切片方法轻松完成此操作。
var arr = ["AAA", "BBB", "CCC", "AAA", "BBB", "CCC", "AAA", "BBB", "CCC", "DDD"];
var firstElem = arr[0];
var secondIndex = arr.indexOf(firstElem, 1);
// Output: ["AAA", "BBB", "CCC"]
var newArr = (secondIndex != -1) ? arr.slice(0, secondIndex) : arr;
答案 1 :(得分:0)
您可以使用Array.prototype.filter()
,引用数组的第一个元素来检查值是否已被迭代
var arr = ["AAA", "BBB", "CCC", "AAA", "BBB", "CCC", "AAA", "BBB", "CCC", "DDD"]
var again = false;
arr = arr.filter(function(el, index) {
return !again && (again = index > 0 && el === arr[0], !again);
});
console.log(arr);

答案 2 :(得分:0)
更快的实施(更适合短期或中型阵列):
var a = ["AAA", "BBB", "CCC", "AAA", "BBB", "CCC", "AAA", "BBB", "CCC", "DDD"];
// Faster implementation:
// (Better for short or medium size arrays)
var b = a.filter((function(){
var idx = {};
var cont = true; // Continue
return function (item){
if (! cont) return false;
if (idx[item]) return cont = false;
return idx[item] = true;
};
})());
console.log(b);
// [ 'AAA', 'BBB', 'CCC' ]
以最少的内存浪费实现(但效率极低):
// Minimal memory waste implementation:
var b = a.filter((function(){
var cont = true; // Continue
return function (item, i){
if (! cont) return false;
if (a.slice(0, i).filter(x=>x==item).length) return cont = false;
return true;
};
})());
console.log(b);
// [ 'AAA', 'BBB', 'CCC' ]
当然,有无限的中间方法(取决于你的需要)。但是,如果您不需要解析 HUGE 数组,最好的解决方案是使用第一种方法:一旦过滤器处理完成,Index将被垃圾收集器释放,事实上,如果你很幸运,重复发生得很早,然后就没有多少记忆; - )
答案 3 :(得分:0)
使用jQuery each()函数快速而又脏。
each()遍历数组并将元素添加到新数组,直到找到第一个元素的副本。
var arr = ["AAA", "BBB", "CCC", "AAA", "BBB", "CCC", "AAA", "BBB", "CCC", "DDD"];
var newArray = [];
$.each(arr, function(i, el){
if($.inArray(el, newArray) === -1)
newArray.push(el);
else if (el == arr[0])
return false
});
arr = newArray;
// Formatted array is in "arr"
alert(arr);
答案 4 :(得分:-1)
虽然你的问题并不完全清楚 但仍然按照我的理解,我提供以下解决方案
Solution 1:
Assumption: You have a list of input and a pointer which shows the last index till you want to pick the input data.
public static void main(String[] args) {
String input[] = { "AAA", "BBB", "CCC", "AAA", "BBB", "CCC", "AAA", "BBB", "CCC", "DDD" };
String output[]= new String[5];
int stopByIndex =3;
for(int i=0;i<stopByIndex;i++){
output[i]=input[i];
}
System.out.println(output);
}
Solution 2:
Assumption: Print elements which occurred multiple times:
public static void main(String[] args) {
String input[] = { "AAA", "BBB", "CCC", "AAA", "BBB", "CCC", "AAA", "BBB", "CCC", "DDD" };
List<String> output = new ArrayList<>();
Map<String, Integer> keyWithCount = new HashMap<String, Integer>();
int stopByIndex = 3;
for (String str : input) {
if (keyWithCount.containsKey(str)) {
keyWithCount.put(str, keyWithCount.get(str) + 1);
} else {
keyWithCount.put(str, 1);
}
}
Iterator<Entry<String, Integer>> itr = keyWithCount.entrySet().iterator();
while (itr.hasNext()) {
Entry<String, Integer> entry = itr.next();
if (entry.getValue() > 1) {
output.add(entry.getKey());
}
}
System.out.println(output);
}
答案 5 :(得分:-1)
试试这个:
var arr = ["AAA", "BBB", "CCC", "AAA", "BBB", "CCC", "AAA", "BBB", "CCC", "DDD"];
arr.splice(3)