Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中,如何从对象的数组中提取数据并将其插入到对象的另一个数组中?_Javascript - Fatal编程技术网

在Javascript中,如何从对象的数组中提取数据并将其插入到对象的另一个数组中?

在Javascript中,如何从对象的数组中提取数据并将其插入到对象的另一个数组中?,javascript,Javascript,我有一个变量qstore,它有一个包含响应列表的ans数组。名为r的字段用于保存响应数据(true或false),并存储在名为ans qstore: {"id":2, "qId":2, "ans":[{"r":true}, {"r":true}, {"r":false}, {"r":false}, {"r":false}]} 另一个

我有一个变量qstore,它有一个包含响应列表的ans数组。名为r的字段用于保存响应数据(true或false),并存储在名为
ans

qstore: {"id":2,
         "qId":2,
         "ans":[{"r":true},
                {"r":true},
                {"r":false},
                {"r":false},
                {"r":false}]}
另一个变量qview:

qview: {"problemId":2,
          "questionId":1,
          "answer":null,
          "text":"xx",
          "answers":[{"answerId":1,
                      "response":false},
                     {"answerId":2,
                      "response":false},
                     {"answerId":3,
                      "response":false},
                     {"answerId":4,
                      "response":false},
                     {"answerId":5,
                       "response":false}]}
我需要做的是,如果qstore中有一个名为
ans
的数组(可能没有),那么我需要获取答案响应字段
r
,并使用该字段更新qview对象中的答案
response
字段。请注意,如果qview和qstore确实有答案,它们的答案数将始终相同


有人能告诉我一个简单的方法吗?

只需在
qstore.ans
数组(如果存在)上循环,然后在
qview
中设置相应的值即可

if(qstore.hasOwnProperty('ans')){
    for(var i = 0, len = qstore.ans.length; i < len; i++){
        qview.answers[i].response = qstore.ans[i].r;
    }
}
if(qstore.hasOwnProperty('ans')){
对于(变量i=0,len=qstore.ans.length;i
我需要做的是,如果qstore中有一个名为ans的数组(可能没有),那么我需要获取答案响应字段r,并使用它来更新qview对象中的答案响应字段。请注意,如果qview和qstore确实有答案,它们的答案数将始终相同

//假设'qstore','qview`
变量i,j,ans=qstore.ans;
if(ans){//如果qstore有非falsy ans
qstore:for(i=0,j=0;i}else if(qview.answers[j].answerId是最简单的解决方案。

这样,只有当您在
ans
array
上有至少1个寄存器时,才会执行它。我发现上面的解决方案无法验证
ans
数组是否有寄存器,因此我认为它适合您的情况

代码如下:

if (qstore.ans != null){
    if (qstore.ans.length > 0){
        for (i=0;i<qstore.ans.length);i++){
            qview.answers[i].response = qstore.ans[i].r;
        }
    }
}
if(qstore.ans!=null){
如果(qstore.ans.length>0){

对于(i=0;iJavaScript有多种方法来检查对象中是否存在键:
in
object.hasOwnProperty
。两者之间的区别在于,如果在对象的原型链中找到键,则
in
也会返回
true

现在看来,您的响应的id是1索引的,但如果我们迭代它在数组中位置的索引,这并不重要:

if ('ans' in qstore) {
    for (var i = 0; i <= qstore.ans.length; i++) {
        qview.answers[[i].response = qstore.ans[i].r
    }
}

你试过什么了吗?天哪,你是如何在不到8分钟的时间内阅读整个问题、思考并编写代码的?修复了它,忘记了
.length
:P
qstore.hasOwnProperty('ans'))
即使ans
有0个寄存器,也会返回true,那么如果你有0个寄存器,为什么还要执行代码呢?@PauloRoberto:因为在空白数组上运行
for
循环不会占用我需要担心的太多CPU时间。呵呵,好吧,但这是优化的额外验证:PThanks Jackie。我喜欢y的方式你建议使用forEach。这对我来说容易多了。如果“ans”数组存在并且是空的?也许验证更可行。@PauloRoberto循环的执行次数与元素的执行次数一样多。因此,对于空数组,不会发生任何事情。如果你想在数组为空时执行特殊操作,则需要进行简单的验证(例如
if(qstore.ans.length==0){//do something}
)就足够了。
if ('ans' in qstore) {
    for (var i = 0; i <= qstore.ans.length; i++) {
        qview.answers[[i].response = qstore.ans[i].r
    }
}
if ('ans' in qstore) {
    qstore.ans.forEach(function(element, index) {
        element.response = qstore.ans[index].r
    })
}