Мы провели аналогичное тестирование, чтобы узнать, как мое приложение отвечает за потребление батареи телефона Nexus5.
Но, к сожалению, мы не смогли получить помощь от какого-либо инструмента, но в основном это было основано на ручном тестировании.
Мы идентифицировали некоторые модули в приложении, которые были заподозрены в увеличении потребления батареи.
Наконец, после 3-4 раунда тестирования у нас была определенная тенденция в данных, и мы смогли идентифицировать модуль, который был большим виновником потребления батареи.
В основном будет больше потребления батареи, если что-то удержит процессор больше времени. Таким образом, мы можем думать о модуле, который имеет фоновые операции, связанные с сетью операции.
На данный момент я не могу найти инструмент, который мог бы сказать выше результата тестирования в определенном приложении.
Hope мой опыт был бы полезен для заявления о требованиях в исходном вопросе.
Фильтр, Карта, Уничтожение объектов могут выполнять работу:
const y = [{
"score": "1200.65",
"num_games": "160",
"wins": "110",
"year": "2013"
},
{
"score": "705.23",
"num_games": "34",
"wins": "21",
"year": "2014"
},
{
"score": "467.12",
"num_games": "77",
"wins": "30",
"year": "2015"
}
];
const res = y.filter(o => o.year == 2014).map(({
year: x,
score: y
}) => ({
x,
y
}))
console.log(res)
Array#filter
Array#map
var data = [{"score": "1200.65", "num_games": "160", "wins": "110", "year": "2013" }, { "score": "705.23", "num_games": "34", "wins": "21", "year": "2014" }, { "score": "467.12", "num_games": "77", "wins": "30", "year": "2015" }];
function getFilteredData(data, start, end) {
return data.filter(function(item) {
return +start <= +item.year && +item.year <= +end;
}).map(function(item) {
return {
x: item.year,
y: item.score
};
});
}
console.log(getFilteredData(data, 2014, 2017));
Если ваши даты находятся в разумных пределах, вам не нужно конвертировать год в number
, но любые 3–5-значные годы не будут фильтроваться должным образом, если вы не конвертируете годы в числа.
Если вы хотите более абстрактную версию функции, вы можете сделать:
var data = [{"score": "1200.65", "num_games": "160", "wins": "110", "year": "2013" }, { "score": "705.23", "num_games": "34", "wins": "21", "year": "2014" }, { "score": "467.12", "num_games": "77", "wins": "30", "year": "2015" }];
function getFilteredData(data, filterOptions, mapOptions) {
return data.filter(function(item) {
return Object.keys(filterOptions).every(function(key) {
var option = filterOptions[key];
if (+option.min <= +item[key] && +item[key] <= +option.max) return true;
});
}).map(function(item) {
return Object.keys(mapOptions).reduce(function(result, key) {
var option = mapOptions[key];
result[key] = item[option];
return result;
}, {});
});
}
function registerFilter(filterOptions, mapOptions) {
return function(data) {
return getFilteredData(data, filterOptions, mapOptions);
};
}
var customFilter = registerFilter(
{ year: { min: 2014, max: 2015 },
{ x: "year", y: "score" }
);
console.log(customFilter(data));
Вы можете сделать обе операции вместе используя петлю for
или Array#reduce
. Что делает код более быстрым, но менее обслуживаемым.
var data = [{"score": "1200.65", "num_games": "160", "wins": "110", "year": "2013" }, { "score": "705.23", "num_games": "34", "wins": "21", "year": "2014" }, { "score": "467.12", "num_games": "77", "wins": "30", "year": "2015" }];
function getFilteredData(data, start, end) {
return data.reduce(function(result, item) {
if (+start <= +item.year && +item.year <= +end) result.push({
x: item.year,
y: item.score
});
return result;
}, []);
}
console.log(getFilteredData(data, 2014, 2017));
Сначала отфильтруйте массив по датам, затем сопоставьте отфильтрованные элементы с требуемым форматом. Вы можете использовать деструктуризацию, чтобы сделать код короче:
const data = [{
"score": "1200.65",
"num_games": "160",
"wins": "110",
"year": "2013"
}, {
"score": "705.23",
"num_games": "34",
"wins": "21",
"year": "2014"
}, {
"score": "467.12",
"num_games": "77",
"wins": "30",
"year": "2015"
}];
const filterBy = (data, [min, max], prop) => data
.filter(({ year }) => year >= min && year <= max)
.map(({ year: x, [prop]: y }) => ({ x, y }));
console.log(filterBy(data, [2013, 2014], 'score'));
console.log(filterBy(data, [2013, 2013], 'wins'));
Вы можете использовать .filter
, чтобы получить объекты в требуемом диапазоне, а затем использовать .map
для создания объектов из отфильтрованного списка.
См. Пример ниже:
const arr = [{
"score": "1200.65",
"num_games": "160",
"wins": "110",
"year": "2013"
},
{
"score": "705.23",
"num_games": "34",
"wins": "21",
"year": "2014"
},
{
"score": "467.12",
"num_games": "77",
"wins": "30",
"year": "2015"
}];
const get_items = (arr, [sY, eY], prop) =>
arr
.filter(({year}) => +sY <= year && year <= +eY)
.map(({year:x, ...rest}) => ({x, y: rest[prop]}));
console.log(get_items(arr, ["2014", "2015"], "score"));