我正在经历推送功能的意外行为。问题出在下面引用的最新一行代码上。
export enum non_searchFieldsNames {
language = 'language',
categories = 'categories',
subtitle = 'subtitle',
publishedDate = 'publishedDate',
id = 'id',
}
enum columnsEnum {
title,
authors,
language,
categories,
subtitle,
publishedDate,
}
function toArray(obj: header | contentCategories | sourceFields) {
return Object.entries(obj)
.sort((a, b) => {
return +a - +b;
})
.map(item => item[1]);
}
let sourceFieldsObject: sourceFields = {
[columnsEnum.title]: searchFieldsNames.title,
[columnsEnum.authors]: searchFieldsNames.authors,
[columnsEnum.language]: non_searchFieldsNames.language,
[columnsEnum.categories]: non_searchFieldsNames.categories,
[columnsEnum.subtitle]: non_searchFieldsNames.subtitle,
[columnsEnum.publishedDate]: non_searchFieldsNames.publishedDate,
};
const sourceFieldsArray = toArray(sourceFieldsObject).push(non_searchFieldsNames.id);
问题出在最新的代码行。我收到的值是7。当我这样化简
const sourceFieldsArray = toArray(sourceFieldsObject)
我收到一个数组(当然,没有我试图添加的值)。
当我分割逻辑
const sourceFieldsArray = (toArray(sourceFieldsObject));
sourceFieldsArray.push(non_searchFieldsNames.id);
我得到我想要的。不管怎样,我想把它写成一行。那么,我的误差是多少?我也试过了
const sourceFieldsArray (toArray(sourceFieldsObject)).push(non_searchFieldsNames.id)
但它没有帮助。
push
直接修改主数组,它不会像您期望的那样返回一个新数组,而是返回该数组中项的计数。
您可以检查下面的演示push
的返回值
const array = [1,1,1] //3 items
const count = array.push(1) //1 more item
console.log(count) //total is 4 items
如果希望使用一行代码,可以尝试使用扩展操作符
克隆方法const sourceFieldsArray = [...toArray(sourceFieldsObject), non_searchFieldsNames.id]
需要注意的是,这种方法意味着你完全是在创建一个新的数组,所以你需要意识到一个巨大的数组的一些性能情况。