相关疑难解决方法(0)

Javascript是否通过引用传递?

Javascript是通过引用传递还是通过值传递?以下是Javascript:Good Parts的示例.我my对矩形函数的参数非常困惑.它实际上是undefined在函数内部重新定义的.没有原始参考.如果我从函数参数中删除它,则内部区域功能无法访问它.

是关闭吗?但是没有返回任何函数.

var shape = function (config) {
    var that = {};
    that.name = config.name || "";
    that.area = function () {
        return 0;
    };
    return that;
};
var rectangle = function (config, my) {
    my = my || {};
    my.l = config.length || 1;
    my.w = config.width || 1;
    var that = shape(config);
    that.area = function () {
        return my.l * my.w;
    };
    return that;
};
myShape = shape({
    name: "Unhnown"
}); …
Run Code Online (Sandbox Code Playgroud)

javascript reference pass-by-reference pass-by-value

340
推荐指数
8
解决办法
14万
查看次数

Mongoose,更新对象数组中的值

有没有办法更新对象中的值?

{
  _id: 1,
  name: 'John Smith',
  items: [{
     id: 1,
     name: 'item 1',
     value: 'one'
  },{
     id: 2,
     name: 'item 2',
     value: 'two'
  }]
}
Run Code Online (Sandbox Code Playgroud)

假设我想更新id = 2的项目的名称和值项目;

我尝试了以下w/mongoose:

var update = {name: 'updated item2', value: 'two updated'};
Person.update({'items.id': 2}, {'$set':  {'items.$': update}}, function(err) { ...
Run Code Online (Sandbox Code Playgroud)

这种方法的问题在于它更新/设置整个对象,因此在这种情况下我丢失了id字段.

有没有更好的方法在mongoose中设置数组中的某些值但是只留下其他值?

我也只是询问了这个人:

Person.find({...}, function(err, person) {
  person.items ..... // I might be able to search through all the items here and find item with id 2 then update the values I want …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb node.js

74
推荐指数
7
解决办法
10万
查看次数

为什么JavaScript中的对象不可访问?

为什么默认情况下对象不可迭代?

我一直看到与迭代对象有关的问题,常见的解决方案是迭代对象的属性并以这种方式访问​​对象中的值.这似乎很常见,它让我想知道为什么对象本身不可迭代.

for...of默认情况下,像ES6 这样的语句很适合用于对象.因为这些功能仅适用于不包含{}对象的特殊"可迭代对象" ,所以我们必须通过箍来使这个对我们想要使用它的对象起作用.

for ... of语句创建一个循环迭代可迭代对象 (包括Array,Map,Set,arguments对象等)......

例如,使用ES6 生成器功能:

var example = {a: {e: 'one', f: 'two'}, b: {g: 'three'}, c: {h: 'four', i: 'five'}};

function* entries(obj) {
   for (let key of Object.keys(obj)) {
     yield [key, obj[key]];
   }
}

for (let [key, value] of entries(example)) {
  console.log(key);
  console.log(value);
  for (let [key, value] of entries(value)) {
    console.log(key);
    console.log(value);
  }
}
Run Code Online (Sandbox Code Playgroud)

当我在Firefox(支持ES6)中运行代码时,上面按照我期望的顺序正确记录数据:

hacky的输出

默认情况下,{}对象不可迭代,但为什么?缺点是否超过了可迭代对象的潜在好处?与此相关的问题是什么?

此外,由于{}对象是从"阵列状"集合和"可迭代的对象",如不同NodeList,HtmlCollection以及arguments …

javascript arrays iterator ecmascript-5 ecmascript-6

72
推荐指数
4
解决办法
5万
查看次数

ES6是否为对象属性引入了明确定义的枚举顺序?

ES6是否为对象属性引入了明确定义的枚举顺序?

var o = {
  '1': 1,
  'a': 2,
  'b': 3
}

Object.keys(o); // ["1", "a", "b"] - is this ordering guaranteed by ES6?

for(let k in o) {
  console.log(k);
} // 1 2 3 - is this ordering guaranteed by ES6?
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6

50
推荐指数
3
解决办法
1万
查看次数

如何在React中映射对象数组

我有一个对象数组.我想映射这个对象数组.我知道如何映射数组,但无法弄清楚如何映射对象数组.这是我到目前为止所做的:

我要映射的对象数组:

const theData = [
    {
        name: 'Sam',
        email: 'somewhere@gmail.com'
    },

    {
        name: 'Ash',
        email: 'something@gmail.com'
    }
]
Run Code Online (Sandbox Code Playgroud)

我的组件:

class ContactData extends Component {
    render() {
        //works for array
        const renData = this.props.dataA.map((data, idx) => {
            return <p key={idx}>{data}</p>
        });

        //doesn't work for array of objects
        const renObjData = this.props.data.map(function(data, idx) {
            return <p key={idx}>{data}</p>
        });

        return (
            <div>
                //works
                {rennData}
                <p>object</p>
                //doesn't work
                {renObjData}
            </div>
        )
    }
}


ContactData.PropTypes = {
    data: PropTypes.arrayOf(
        PropTypes.obj
    ),
    dataA: PropTypes.array
} …
Run Code Online (Sandbox Code Playgroud)

arrays components dictionary object reactjs

12
推荐指数
3
解决办法
9万
查看次数

循环JavaScript对象的其他方法?

下面的代码运行良好,但ESLint插件显示警告:"不允许使用'ForinStatement'"所以我想将其更改为其他方法来阻止警告消息:

    let count = 0;
    for (const key in groups) {
      if (Object.prototype.toString.call(groups[key]) === '[object Object]') {
        if ({}.hasOwnProperty.call(groups[key], 'users')) {
          count += groups[key].users.length;
        }
      }
    }
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6

5
推荐指数
1
解决办法
4363
查看次数

javascript:修剪对象的所有属性

有没有办法修剪对象的所有属性?换句话说,我可以更改一下:

{a: ' a', b: 'b ', c: ' c '}
Run Code Online (Sandbox Code Playgroud)

对此:

{a: 'a', b: 'b', c: 'c'}
Run Code Online (Sandbox Code Playgroud)

看来我无法映射对象,那么如何将函数应用于所有属性并获取对象呢?

javascript ecmascript-6

4
推荐指数
2
解决办法
3701
查看次数

对象属性名称的箭头函数的简写

当我有:

const foo = 1;
Run Code Online (Sandbox Code Playgroud)

我可以设置对象属性名称的简写

const bar = {foo}
Run Code Online (Sandbox Code Playgroud)

就像那样

const bar = {foo: foo} // bar will be {foo: 1}
Run Code Online (Sandbox Code Playgroud)

当我有一个带箭头功能的const时,有没有简写?

const foo = () => 1
Run Code Online (Sandbox Code Playgroud)

我必须像这样设置它,但它不酷

const bar = {foo: foo()}
Run Code Online (Sandbox Code Playgroud)

我想这样或者更短的东西

const bar = {foo()}  //bar should be {foo: 1} but this will fail
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6

3
推荐指数
1
解决办法
285
查看次数

javascript 对象上的映射 - 获取对象键

我需要映射这样的对象

let obj = { 
    a : { value : 5, meta: "sss" },
    b : { value : 1, meta: "rrr" },
    a : { value : 6, meta: "nnn" },
}`
Run Code Online (Sandbox Code Playgroud)

像这样获得并反对

{ a: 5, b: 1, c:6}
Run Code Online (Sandbox Code Playgroud)

我无法获取字符串形式的“密钥”。

我试过了:

let yyy = Object.keys(obj).map(function (key) {
    return { key: obj[key].value };
});
Run Code Online (Sandbox Code Playgroud)

但它会生成一个“数组”(虽然我需要一个对象),其中包含{key : 5}... 字符串“key”而不是键的名称。

javascript javascript-objects ecmascript-6

3
推荐指数
2
解决办法
3万
查看次数

如何编写此递归函数以查找对象的最大深度?

我正在尝试编写一个函数,它将遍历我的对象并返回对象的级别深度.

例如,如果我在此对象上运行该函数:

var test = {
  name: 'item 1',
  children: [{
    name: 'level 1 item',
    children: [{
      name: 'level 2 item'
    },
    {
      name: 'second level 2 item',
      children: [{
        name: 'level 3 item'
      }]
    }]
  }]
}

var depth = myFunction(test); // Would return 2 (0 index based) as the collection goes 3 levels deep
Run Code Online (Sandbox Code Playgroud)

我一直在尝试编写一个确定最大深度的递归函数,但到目前为止我无法做到正确.这是我到目前为止:https://jsfiddle.net/6cc6kdaw/2/

似乎返回的值是每个节点命中的计数,而不是唯一级别.我明白我哪里出错了(从某种意义上说我没有过滤掉它)但是我已经盯着代码这么久以至于没有任何意义了!

有谁能够指出我哪里出错了?谢谢

javascript recursion

2
推荐指数
4
解决办法
866
查看次数

如何将对象转换为对象数组?

所以我有一些状态是一个看起来像这样的对象

object:{
  foo: Array[3]
  bar: Array[6]
}
Run Code Online (Sandbox Code Playgroud)

并且对象内部的条目数量可能会发生变化,它可能有3个数组,它可能有10个.它需要是动态的我必须显示那些作为计数(在饼图中)接受数据看起来像这样,数据是JSX标记内的prop

data:{[
  {x:foo, y:foo.length},
  {x:bar, y:bar.length}
]}
Run Code Online (Sandbox Code Playgroud)

x输出作为名称,y输出作为数字(不是百分比,lib为我工作)

我试过在这里使用一些例子,例如这个帖子,但我只是没有得到它

ES6语法的首选项如果你感兴趣的话,我正在使用Victory for my graphing lib

javascript reactjs victory-charts

1
推荐指数
1
解决办法
108
查看次数

如果 Redux 操作实际上不执行任何操作,为什么它们被称为操作(IE 调度)

如果 Redux 操作实际上并不对数据进行操作而只是返回一个有效负载,为什么它们被称为操作?

除了被分派之外,动作还有其他用途吗,为什么在调用时不分派动作?

这只是未来证明可与多个商店一起使用的应用程序的一种方式吗?

这也产生了对 mapDispatchToProps 的需求,它通常是完全样板代码,用于用调度调用包装动作

通常可以用这个函数来概括,它接受一个动作对象并返回一个 mapDispatchToProps 函数

// mapActionsToDispatchProps.js
const mapActionsToDispatchProps = actions => {
  return dispatch => (
    actions.mapEntries(action => (
      (...args) => dispatch(action(...args))
    )
  )
)
export default mapActionsToDispatchProps
Run Code Online (Sandbox Code Playgroud)

Object.mapEntries示例。

编辑

我看到最后一个关于 mapDispachToProps 主要是样板的问题可以通过直接传递一个动作对象来避免,并且 connect 将为我映射它们。

redux react-redux redux-actions

0
推荐指数
1
解决办法
79
查看次数

如何使用map或foreach通过奇数,偶数索引将2个数组合并为一个

我有 2 个数组:

var keys = Object.keys(item); // [first, second, third, forth]
var values = Object.values(item); // [fifth, sixth, seventh, eighth]
let newArray = [];
Run Code Online (Sandbox Code Playgroud)

输出应该是:

[first, fifth, second, sixth, third, seventh, forth, eighth]
Run Code Online (Sandbox Code Playgroud)

是否可以不使用任何 while 循环,例如for i in itemfor i = 0;i <= item.length; i++ ..
只需使用地图、拼接等。

javascript arrays functional-programming

0
推荐指数
1
解决办法
301
查看次数