我有用例使用NodeJS動態生成字串串列,如果給定的字串是null我應該從串列中排除該字串。例如:我有productID,productName,productPrice和productType。如果productID是null那么productID欄位應該從串列中排除,如果productName是null則productName應該排除等。IfproductID和productNameare nullthen 這兩個欄位都應該從串列中排除。
我有下面的示例代碼,但這不是一種有效的方法,有人可以建議我們如何使用 NodeJS 以更好的方式實作這個用例。
const test = async () => {
console.log('generate params')
var params;
var productID;
var productName = "APPLE";
var productPrice = "12";
var productType = "Electronics"
if (productID == null) {
params = {
"PRODUCT_NAME": productName,
"PRODUCT_PRICE": productPrice,
"PRODUCT_TYPE": productType
}
} else if (productName == null) {
params = {
"PRODUCT_ID": productID,
"PRODUCT_PRICE": productPrice,
"PRODUCT_TYPE": productType
}
}
else if (productPrice == null) {
params = {
"PRODUCT_ID": productID,
"PRODUCT_NAME": productName,
"PRODUCT_TYPE": productType
}
}
else if (productType == null) {
params = {
"PRODUCT_ID": productID,
"PRODUCT_NAME": productName,
"PRODUCT_PRICE": productPrice,
}
}
console.log("param value", params)
}
test()
uj5u.com熱心網友回復:
ES6 的最短路徑
params = {
"PRODUCT_ID": null,
"PRODUCT_NAME": 'productName',
"PRODUCT_PRICE": 'productPrice',
"PRODUCT_TYPE": 'productType'
}
console.log(params)
//Removes only null
params = Object.entries(params).reduce((a,[k,v]) => (v === null ? a : (a[k]=v, a)), {})
console.log(params)
uj5u.com熱心網友回復:
您可以簡單地創建一個資料結構(在本例中為物件)并在其中添加所有屬性
const collection = { productID, productName, productPrice, productType };
然后你可以使用reduce將它收集到單個物件中,如果它不為空
const params = Object.keys(collection).reduce((acc, curr) => {
if (collection[curr]) acc[curr] = collection[curr];
return acc;
}, {});
單線
const params = Object.keys(collection).reduce((acc, curr) => (collection[curr] ? { ...acc, [curr]: collection[curr] }: acc), {});
const test = async () => {
console.log("generate params");
var productID;
var productName = "APPLE";
var productPrice = "12";
var productType = "Electronics";
const collection = { productID, productName, productPrice, productType };
const params = Object.keys(collection).reduce((acc, curr) => {
if (collection[curr]) acc[curr] = collection[curr];
return acc;
}, {});
console.log("param value", params);
};
test();
已編輯
單線
const params = Object.keys(collection).reduce((acc, curr) => collection[curr] ? [...acc, mapping[curr]]: acc, []);
var productID;
var productName = "APPLE";
var productPrice = "12";
var productType = "Electronics";
const collection = { productID, productName, productPrice, productType };
const mapping = {
produtID: "PRODUCT_ID",
productName: "PRODUCT_NAME",
productPrice: "PRODUCT_PRICE",
productType: "PRODUCT_TYPE",
};
const params = Object.keys(collection).reduce((acc, curr) => {
if (collection[curr]) acc.push(mapping[curr]);
return acc;
}, []);
console.log("param value", params);
uj5u.com熱心網友回復:
/* if first value is falsy, use the second value */
params = {
"PRODUCT_ID": productName | null,
"PRODUCT_NAME": productName | null,
"PRODUCT_PRICE": productPrice | null,
"PRODUCT_TYPE": productType | null
}
/*
and if you want to remove keys that are null
( i don't know why you would want to do this)
import omitBy and isNull from lodash and do the following
*/
return( _.omitBy( params, _.isNull ));
忘了你需要在降價中轉義下劃線,所以我不得不編輯
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/336567.html
標籤:javascript 节点.js json
