如果我传入的数组为空,我需要将一个空对象设置为默认值。类似的东西:
var obj = { documents: [...question.documents] || [{}] }
我使用条件修复它,但我想知道是否有更好的方法来实现它。
if(obj.documents.length === 0) obj.documents.push({})
答案 0 :(得分:1)
因为即使是空阵列也是真的,我认为除了在某处进行明确的测试之外,没有任何优秀的解决方案。但是,三元组比if
语句更简洁:
const question = { documents: [] };
const { documents } = question;
const obj = { documents: documents.length !== 0 ? documents : [{}]}
console.log(JSON.stringify(obj));
这是另一种可能性:
const question = { documents: [] };
const [firstElm = {}, ...otherElms] = question.documents;
const obj = { documents: [firstElm, ...otherElms] };
console.log(obj);
答案 1 :(得分:1)
有几种方法可以在单个表达式
中编写它使用三元运算符:
var obj = { documents: [question.documents[0] || {}, ...question.documents.slice(1)] };
使用默认值
.underline-link:after {
background-color: #0982ae
}
.underline-link:hover {
color: #0982ae
}
.underline-link:after {
content: "";
height: 1px;
left: 0;
opacity: 0;
pointer-events: none;
position: absolute;
top: 100%;
transform: translateY(1px);
transition: all .15s cubic-bezier(.39, .575, .565, 1);
transition-property: opacity, transform;
width: 100%
}
.underline-link:focus {
outline: none
}
.underline-link {
font-family: -apple-system, BlinkMacSystemFont, segoe ui, avenir next,
avenir, helvetica neue, helvetica, ubuntu, roboto, noto, arial, sans-serif;
-webkit-font-smoothing: subpixel-antialiased;
text-decoration: underline;
color: #b3b3b3;
cursor: pointer;
position: relative;
display: inline-block;
color: #087096;
font-size: 14px;
font-weight: 400;
text-decoration: none;
-moz-osx-font-smoothing: grayscale
}
.underline-link:hover {
text-decoration: none
}
.underline-link:focus:after, .underline-link:hover:after {
opacity: 1;
transition-delay: .2s;
transition-duration: .15s;
transform: translateY(-3px) translateZ(0)
}
在这两种情况下,由于不得不多次引用来源而产生一些尴尬
答案 2 :(得分:1)
spread运算符用在空数组中。我没看到 指出在这里使用点差运算符。目标可以实现 使用以下内容。
var obj = { documents: question.documents.length ? question.documents : [{}]}
如果正在使用您提供的方法,则不需要or
子句,因为空数组也返回truthy值。所以它可以写成如下: -
var obj = { documents: question.documents }
if(!obj.documents.length) obj.documents.push({})
答案 3 :(得分:0)
这应该适合......
const question = {
documents: [],
};
const obj = {
documents: [].concat(question.documents.length ? question.documents : {})
};
console.log(obj);