我想使用属性category
在此数组中找到匹配的项目,在此应用中,每个用户都可以具有自定义类别,因此服务器在运行该功能之前无法知道类别的名称。
0: {amount: "123", category: "drinks", location: "NYC", note: "piano bar", receipt: "img.jpg", …}
1: {amount: "123", category: "drinks", location: "NYC", note: "piano bar", receipt: "img.jpg", …}
2: {amount: "123", category: "bills", location: "NYC", note: "piano bar", receipt: "img.jpg", …}
3: {amount: "123", category: "savings", location: "NYC", note: "piano bar", receipt: "img.jpg, ...}
到目前为止,这是我的代码
fetch = () => {
this.setState({ loading: true });
const { currentUser } = fire.auth();
var stamp = moment().format('LLLL');
const wallet = fire.database().ref(`/master/${currentUser.uid}/wallets/cash/income/transactions/20190520`);
wallet.on('value', snapshot => {
var data = snapshot.val();
var categories = []
for (let i in data) {
categories.push(data[i].category)
};
console.log(categories);
this.setState({ loading: false, ok: true });
})
}
这里我的目标是找到此数组中的所有类别,并将其存储在{drinks,bills,savings}
之类的值中,然后查看与该类别相匹配的项有多少,例如
答案 0 :(得分:2)
您可以使用reduce
来获取所有类别,并计算与每个类别关联的数组元素的数量。
const arr = [{amount: "123", category: "drinks", location: "NYC", note: "piano bar", receipt: "img.jpg"}, {amount: "123", category: "drinks", location: "NYC", note: "piano bar", receipt: "img.jpg"}, {amount: "123", category: "bills", location: "NYC", note: "piano bar", receipt: "img.jpg"}, {amount: "123", category: "savings", location: "NYC", note: "piano bar", receipt: "img.jpg"}];
let categories = arr.reduce((acc, obj) => {
let category = obj.category;
if (category in acc) {
acc[category] += 1;
} else {
acc[category] = 1;
}
return acc;
}, {});
console.log(categories);
// { drinks: 2, bills: 1, savings: 1 }
答案 1 :(得分:0)
您可以使用Es6 Map类将键存储为类别,将值存储为匹配元素的数组。 Map还提供了许多方法,您可以check here
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVRecord;
import java.io.FileReader;
import java.io.Reader;
public class Test2 {
public static void main(String[] args) throws Exception {
Reader in =
new FileReader(
"przedmioty.csv");
Iterable<CSVRecord> records =
CSVFormat.TDF
.withRecordSeparator("\r\n")
.withFirstRecordAsHeader()
.withHeader("Name", "Teacher", "Years")
.withIgnoreHeaderCase()
.parse(in);
for (CSVRecord csvRecord : records) {
String name = csvRecord.get(1);
// Accessing the values by column header name
String Teacher = csvRecord.get(2);
String years = csvRecord.get(3);
// Printing the record
System.out.println("Record Number -> " + csvRecord.getRecordNumber());
System.out.println("Name: " + name);
System.out.println("Teacher: " + Teacher);
System.out.print("Years : " + years);
System.out.println("\n\n");
}
}
}
答案 2 :(得分:0)
您可以尝试将for用于每个循环并对其进行迭代,然后将计数保存在对象中
let data = [
{amount: "123", category: "drinks", location: "NYC", note: "piano bar", receipt: "img.jpg"},
{amount: "123", category: "drinks", location: "NYC", note: "piano bar", receipt: "img.jpg"},
{amount: "123", category: "bills", location: "NYC", note: "piano bar", receipt: "img.jpg"},
{amount: "123", category: "savings", location: "NYC", note: "piano bar", receipt: "img.jpg"}];
let countObj = {};
data.forEach((val,ind)=>{
if(countObj[val.category]){
countObj[val.category] = countObj[val.category] + 1 ;
}else{
countObj[val.category] = 1;
}
})
console.log(countObj);
给出结果
bills: 1
drinks: 2
savings: 1
答案 3 :(得分:0)
您可以使用array.includes来查看您的值是否已经存在,并在另一个数组中计算数量,如下所示:
fetch = () => {
this.setState({ loading: true });
const { currentUser } = fire.auth();
var stamp = moment().format('LLLL');
const wallet = fire.database().ref(`/master/${currentUser.uid}/wallets/cash/income/transactions/20190520`);
wallet.on('value', snapshot => {
var data = snapshot.val();
var categories = [];
var amounts = [];
for (let i in data) {
if(categories.includes(data[i].category){
if(amounts[data[i].category] == undefined){
amounts[data[i].category]=1;
}else{
amounts[data[i].category]++;
}
}
categories.push(data[i].category)
};
console.log(amounts);
this.setState({ loading: false, ok: true });
})
}