所以我有这段代码,该代码应该计算通过数组输入的数字的出现次数。
let counts = {};
for (let i = 0; i < arr.length; i++) {
let num = arr[i];
counts[num] = counts[num] ? counts[num] + 1 : 1;
}
我不明白为什么要对我提供的输入进行排序? 例如,如果我在输出中输入[1,3,2],则我的对象说:
1:1 2:1 3:1
谢谢。
答案 0 :(得分:1)
您可以使用Map
来维持顺序并渲染对象数组作为结果。
/**
* setCustomFontTypeSpan
* @param context
* @param source
* @param startIndex
* @param endIndex
* @param font
* @return
*/
public static SpannableString setCustomFontTypeSpan(Context context, String
source, int startIndex, int endIndex, int font) {
final SpannableString spannableString = new SpannableString(source);
Typeface typeface = ResourcesCompat.getFont(context, font);
spannableString.setSpan(new StyleSpan(typeface.getStyle()),
startIndex,endIndex,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return spannableString;
}
String source = "Hello world";
SpannableString string = setCustomFontTypeSpan(context, source, 6,
source.length(), R.font.open_sans_bold);
textView.setText(string);
答案 1 :(得分:0)
您正在使用对象来捕获结果,并且键没有隐式顺序-但是,正如您所发现的,它们对于整数键有效。
如果要保持顺序,也许使用具有属性的对象数组作为键和计数-但是,您将遇到寻找正确的项目以增加其计数的问题。
您可以使用一个数组来维持顺序,并使用一个对象来提供快速查找:
let result = {
lookup: {},
counts: []
};
var arr = [1,3,2]
for (let i = 0; i < arr.length; i++) {
let num = arr[i];
var item = result.lookup[num];
if(!item){
item = {key:num,count:0}
result.counts.push(item);
result.lookup[num] = item;
}
item.count++;
}
console.log(result.counts);