次のことがどのように機能しているのか、そしてどのように機能しているのか疑問に思っています:
私は次のように定義された配列を持っています:
_var array = [
{number: '1', value: 'one', context: 'someContext'},
{number: '2', value: 'two', context: 'anotherContext'},
...
]
_
私が現在していることは、要素を配列にプッシュすることです。したがって、配列要素ごとにarray.Push({number: '1', value: 'one', context: 'someContext'});
などが続きます。
これが拡張されました。「コンテンツ」と呼ばれる別のキーがあるとします。このキーには、未定義または文字列の適切な値があります。質問は次のとおりです。プッシュを次のような関数に入れた場合:
_Push(number, value, context, content) {
array.Push({
number: number,
value: value,
context: context,
content: content
})
}
_
とにかく、コンテンツ(関数がパラメーターとして取得する)がnullでない場合、キーコンテンツは要素にのみ追加されることを確認できます。
もちろん、私はそのような関数を変更できます:
_Push(number, value, context, content) {
if(!content) {
array.Push({
number: number,
value: value,
context: context,
content: content
})
} else {
array.Push({
number: number,
value: value,
context: context
})
}
}
_
しかし、問題は、プッシュ機能でこれを行う方法があるかどうかです。私も何か考えました
_array.Push({
number: number,
value: value,
context: context,
content? content: content
})
_
したがって、コンテンツが定義されている場合にのみ挿入されますが、これは機能しますが、そうではありませんでしたが、私のコードに間違いがあるかもしれません。
コードを短くするだけではない場合、最も読みやすいのは次のようなものです。オブジェクトを作成し、値がある場合はプロパティを追加してから、オブジェクトを配列にプッシュします。
Push(number, value, context, content) {
var o = {
number : number,
value : value,
context : context
}
if (content !== null) o.content = content;
array.Push(o);
);
Array.Push
の内部にオブジェクトを直接構築し、値としてnull
を持つものをフィルタリングするES6の方法を次に示します。
function Push(...arg) {
array.Push(['number','value','context','content'].reduce((a,b,i)=> {
if (arg[i] !== null) a[b]=arg[i]; return a;
}, {}))
}
ES2015を使用する場合は、Object.assign
:
array.Push(
Object.assign(
{ number, value, context },
content ? { content } : null
)
);
スプレッド演算子 でオブジェクトリテラル(ECMAScript 2018)を使用すると、非常に簡単に見えます。
const myPush = (number, value, context, content) =>
array.Push({
...{ number, value, context },
...content && { content }
});
配列を拡張することで実行できます:
//create Your own array object
myArray=function(){};
myArray.prototype=Object.create(Array.prototype);
//create method
myArray.prototype.pushDefined=function(obj){
var newObj={};//create clean object
for (var key in obj){
if (typeof obj[key]!='undefined' && obj[key]!=null){
//this element is defined and is not null
newObj[key]=obj[key];
}
}
this.Push(newObj);//Push clean object without undefind properties
};
//tests
var arr=new myArray();
arr.pushDefined({ name:"John",surname:null});
console.log(arr[0]);
または、このメソッドを配列プロトタイプに追加します。
Array.prototype.pushDefined=function(obj)... //this will be method in every array
この特定のプロジェクトでArrayを使用している他のプログラマーについて常に考えているため、Arrayの元のPushメソッドを変更することはお勧めしません。